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
Author
klasyBook
; - 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
.)