C# Language
Interfejs IQueryable
Szukaj…
Tłumaczenie zapytania LINQ na zapytanie SQL
Interfejsy IQueryable i IQueryable<T> umożliwiają programistom przetłumaczenie zapytania LINQ (zapytania „zintegrowanego z językiem”) na określone źródło danych, na przykład relacyjną bazę danych. Weź to zapytanie LINQ napisane w C #:
var query = from book in books
where book.Author == "Stephen King"
select book;
Jeśli books zmiennych są typu, który implementuje IQueryable<Book> powyższe zapytanie jest przekazywane do dostawcy (ustawionego na właściwość IQueryable.Provider ) w postaci drzewa wyrażeń, struktury danych odzwierciedlającej strukturę kodu .
Dostawca może sprawdzić drzewo wyrażeń w czasie wykonywania, aby ustalić:
- że istnieje predykat dla właściwości
AuthorklasyBook; - zastosowana metoda porównania to „równa się” (
==); - że wartość powinna być równa
"Stephen King".
Dzięki tym informacjom dostawca może przetłumaczyć zapytanie C # na zapytanie SQL w czasie wykonywania i przekazać to zapytanie do relacyjnej bazy danych, aby pobrać tylko te książki, które pasują do predykatu:
select *
from Books
where Author = 'Stephen King'
Dostawca jest wywoływany, gdy zmienna query jest iterowana ( IQueryable implementuje IEnumerable ).
(Dostawca użyty w tym przykładzie wymagałby dodatkowych metadanych, aby wiedzieć, do której tabeli należy wysłać zapytanie i wiedzieć, jak dopasować właściwości klasy C # do kolumn tabeli, ale takie metadane są poza zakresem interfejsu IQueryable .)