IQueryable <T>возвращается только из классов Linq to Sql или Linq to Entities? - PullRequest
1 голос
/ 19 июля 2010

В книге, которую я читаю «Pro Linq в C # 2010» (APress, Freeman и Ratz), автор утверждает, что IQueryable будет возвращаться только из классов в пространстве имен Linq to Sql, а не в общем пространстве имен Linq. Я был удивлен этим, так как я думал, что все, что имеет «Где» на конце, должно быть IQueryable. Оказывается, я был неправ, где расширение IEnumerable. Начиная с IQueryable<T> : IEnumerable<T>, вы можете прикрепить пункты where к любому из них.

Прав ли автор?

Я говорю о классах Framework, а не о каком-либо сгенерированном конечным пользователем коде.

Ответы [ 2 ]

1 голос
/ 19 июля 2010

Существует два набора методов расширения для LINQ - один набор содержится в классе Enumerable, а другой - в классе Queryable.

Enumerable для LINQ to Objects, работающих на IEnumerable<T> и использующих делегаты в качестве аргументов.Queryable предназначен для провайдеров LINQ, таких как Entity Framework или LINQ to SQL, которые должны проверять и обрабатывать запрос и, следовательно, использовать IQueryable<T> вместо IEnumerable<T>.

В случае обоих упомянутых O /R mappers они должны преобразовать запрос в запрос SQL.Это не будет работать с делегатами (если только один из них не анализирует код IL или другие безумные вещи), и поэтому методы расширения в Queryable используют деревья выражений в качестве аргументов вместо делегатов.

Помимо обоих упомянутых картографов O / R Службы данных WCF (ранее ADO.NET Data Services) также используют IQueryable<T> (DataServiceQuery<TElement>) и переводят запросы в виде деревьев выражений.в URL.

0 голосов
/ 19 июля 2010

Автор ошибается.У любого класса может быть метод, который возвращает IQueryable<T>.

На самом деле, вы уверены, что автор пропускает LINQ to Entities?LINQ to SQL не совсем устарела, но LINQ to Entities - это то, где Microsoft тратит время и деньги, а не LINQ to SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...