Есть this ... MSDN page, IQueryable(Of T) Interface. Можете ли вы сделать лучшую работу, объясняя, почему нам нужен интерфейс маркера, который не добавляет никаких методов в IEnumerable?Объясните небольшими словами, почему IQueryable <T> не требуется
ответ
Он распространяет IEnumerable
, IQueryable
и IEnumerable<T>
. Он может не иметь собственных методов, но он объединяет эти три других интерфейса как один, поэтому вам не придется разбираться с ними отдельно.
IQueryable<T>
необходимо, поскольку он определяет контракт, который требуется для поставщика LINQ. Многие из методов расширения, доступных на IQueryable<T>
, предназначены для приема выражений, а не делегатов.
Это важно, поскольку провайдер LINQ должен проанализировать дерево выражений, а не вызвать делегата.
IQueryable<T>
также распространяется на IQueryable
. В основном это IQueryable
, который можно перечислить строго типизированным способом. (Оба IQueryable
и IEnumerable<T>
уже распространяются IEnumerable
, так что это не добавляя ничего на этом фронте.)
Теперь, имея сильно типизированных IQueryable
позволяет LINQ к SQL (и т.д.) должны быть строго типизированными - иначе вы не могли бы написать Where
клаузулы и т. д. без кастинга. Фактические методы LINQ относятся к типу Queryable
, в основном зеркально отражая методы Enumerable
, но вместо делегатов принимают деревья выражений. (Если вы раньше не использовали деревья выражений, это в основном структуры данных , описывающие код, тогда как делегат - это сам код. Таким образом, вы можете выполнить делегат, но вы можете изучить дерево выражений, чтобы увидеть, do.)
Используйте IQueryable, если вы хотите перевести запрос linq в дерево выражений (System.Linq). Из дерева выражений вы можете легко перевести запрос LINQ на другой язык (SQL для Linq To SQL Другим классическим примером является Linq в Google, где вы хотите этот запрос:.
var searchResult = from result
in Google.Repository
where result.Equals("i love linq")
select result;
перевести на этот адрес:
http://www.google.com/search?hl=en&q=i+love+linq&aq=f&oq=&aqi=g10
Затем разобрать страницу, чтобы получить результаты
- 1. Объясните TDD простыми словами
- 2. IQueryable vs IQueryable <T>
- 3. Объясните, почему «-» не является «-»
- 4. Как вы объясните переадресацию типа простыми словами?
- 5. Объясните xpath и xquery простыми словами
- 6. HQL внутреннее соединение - пожалуйста, объясните простыми словами
- 7. Как преобразовать IQueryable <IQueryable <Page>> для IQueryable <Page> с Linq
- 8. Cast IQueryable <EntityObject> для IQueryable <Specific>
- 9. Преобразование IQueryable <T> в IQueryable <Y>
- 10. Linq запрос возвращения IQueryable <IEnumerable <User>> не IQueryable <User>
- 11. Возвращение пустой IQueryable <>
- 12. Почему IQueryable реализует IEnumerable?
- 13. Ошибка компиляции при присвоении IQueryable <int> IQueryable <object>
- 14. Почему # требуется до #include <stdio.h>?
- 15. Как изменить группу linq IQueryable <IEnumerable <T>> на IQueryable <T>?
- 16. Force Renew TGT
- 17. Почему этот фильтр работает в списке <T>, но не на IQueryable <T>?
- 18. Kerberos TGT Behavior
- 19. (! [] + []) [+ []] ... Объясните, почему это работает
- 20. Как использовать выражение генератора CMake $ <TARGET_FILE: tgt>?
- 21. Почему объявление не требуется?
- 22. Как вернуть IQueryable <Something> как IQueryable <ISomething>
- 23. Почему #include <stdio.h> не требуется использовать printf()?
- 24. Почему «FirstOrDefault()» не требуется в коде rasor <th>?
- 25. CAS: Расшифровка TGT
- 26. IQueryable <t> Или IList <t>
- 27. Поисковый запрос IQueryable <> MVC
- 28. Объясните, почему JS RegEx не работает
- 29. Объясните, почему import scala.Predef.String не удается построить
- 30. Объясните, почему этот код не работает
это было 7 лет, но так как предложение по почтенным автором было сделано, я возьму его:. фиктивный доказательство explan возможно ли существование деревьев выражений? возможно, для будущих читателей больше, чем я, потому что Google заманивает :) – BKSpurgeon
@BKSpurgeon: Я немного добавлю, но на самом деле это не вопрос, поэтому я думаю, вам будет лучше с учебник, чтобы быть честным. –