Могу ли я расширить операторы, которые поддерживает LINQ-to-SQL? - PullRequest
2 голосов
/ 21 августа 2009

Если бы я захотел достаточно сильно, могу ли я добавить дополнительные конструкции LINQ к LINQ-to-SQL (как я мог бы это сделать, создав собственный провайдер LINQ)? Например, многие из встроенных операторов LINQ (XYZ.Any()) напрямую переводятся в SQL (например, IF EXISTS(XYZ)).

Если бы мне потребовалась специализированная конструкция, смогу ли я даже дополнить набор, или это нужно включить в реальный поставщик LINQ-to-SQL?

Как мне добавить добавленную реализацию нового оператора? Являются ли методы расширения C # достаточно ловкими для выполнения работы?

Если ответ «да», сможет ли кто-то с такой склонностью заменить большую часть (все?) Возможностей sproc с помощью динамического SQL, генерируемого LINQ-to-SQL?

Ответы [ 2 ]

1 голос
/ 21 августа 2009

Теоретически вы можете добавить поддержку произвольных выражений для поставщика LINQ, но Павел прав, что LINQ to SQL не будет работать в качестве отправной точки. Я хотел бы взглянуть на SubSonic или NHibernate, которые также разрабатывают поставщиков LINQ. Как только провайдер поддерживает выражение, вам просто нужно создать эквивалентный метод расширения для IQueryable<T> - для подробностей укажите System.Linq.Queryable.

Тем не менее, разбор выражений деревьев определенно не для слабонервных. Если вы действительно не интересуетесь теорией AST, вероятно, было бы проще просто расширить OSS ORM "обычным" способом.

1 голос
/ 21 августа 2009

Нет, LINQ to SQL не расширяется таким образом. Лучшее, что вы можете сделать, - это использовать хранимые процедуры.

...