2009-06-25 1 views

ответ

3

Он распространяет IEnumerable, IQueryable и IEnumerable<T>. Он может не иметь собственных методов, но он объединяет эти три других интерфейса как один, поэтому вам не придется разбираться с ними отдельно.

5

IQueryable<T> необходимо, поскольку он определяет контракт, который требуется для поставщика LINQ. Многие из методов расширения, доступных на IQueryable<T>, предназначены для приема выражений, а не делегатов.

Это важно, поскольку провайдер LINQ должен проанализировать дерево выражений, а не вызвать делегата.

12

IQueryable<T> также распространяется на IQueryable. В основном это IQueryable, который можно перечислить строго типизированным способом. (Оба IQueryable и IEnumerable<T> уже распространяются IEnumerable, так что это не добавляя ничего на этом фронте.)

Теперь, имея сильно типизированных IQueryable позволяет LINQ к SQL (и т.д.) должны быть строго типизированными - иначе вы не могли бы написать Where клаузулы и т. д. без кастинга. Фактические методы LINQ относятся к типу Queryable, в основном зеркально отражая методы Enumerable, но вместо делегатов принимают деревья выражений. (Если вы раньше не использовали деревья выражений, это в основном структуры данных , описывающие код, тогда как делегат - это сам код. Таким образом, вы можете выполнить делегат, но вы можете изучить дерево выражений, чтобы увидеть, do.)

+0

это было 7 лет, но так как предложение по почтенным автором было сделано, я возьму его:. фиктивный доказательство explan возможно ли существование деревьев выражений? возможно, для будущих читателей больше, чем я, потому что Google заманивает :) – BKSpurgeon

+1

@BKSpurgeon: Я немного добавлю, но на самом деле это не вопрос, поэтому я думаю, вам будет лучше с учебник, чтобы быть честным. –

0

Используйте 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

Затем разобрать страницу, чтобы получить результаты

Смежные вопросы