Поиск…


Перевод запроса 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 .)



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow