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
.)