C# Language
Интерфейс IQueryable
Поиск…
Перевод запроса LINQ в SQL-запрос
Интерфейсы IQueryable и IQueryable<T> позволяют разработчикам преобразовывать запрос LINQ («интегрированный язык») в конкретный источник данных, например реляционную базу данных. Возьмите этот запрос LINQ, написанный на C #:
var query = from book in books
where book.Author == "Stephen King"
select book;
Если переменные books имеют тип, реализующий IQueryable<Book> то указанный выше запрос передается провайдеру (установленному в IQueryable.Provider ) в виде дерева выражений, структуры данных, которая отражает структуру кода ,
Поставщик может проверить дерево выражений во время выполнения, чтобы определить:
- что есть предикат для
AuthorсвойстваBookкласса; - что используемый метод сравнения равен 'equals' (
==); - что ценность, которую она должна быть равна, -
"Stephen King".
С помощью этой информации поставщик может перевести запрос C # на SQL-запрос во время выполнения и передать этот запрос в реляционную базу данных для извлечения только тех книг, которые соответствуют предикату:
select *
from Books
where Author = 'Stephen King'
Поставщик получает вызов, когда переменная query перебирается ( IQueryable реализует IEnumerable ).
(Поставщик, используемый в этом примере, потребует некоторых дополнительных метаданных, чтобы узнать, какая таблица запрашивать и знать, как сопоставить свойства класса C # с столбцами таблицы, но такие метаданные находятся за пределами области интерфейса IQueryable .)