C# Language
IQueryable-gränssnitt
Sök…
Översätta en LINQ-fråga till en SQL-fråga
IQueryable och IQueryable<T> gör det möjligt för utvecklare att översätta en LINQ-fråga (en "språkintegrerad" fråga) till en specifik datakälla, till exempel en relationsdatabas. Ta denna LINQ-fråga skriven i C #:
var query = from book in books
where book.Author == "Stephen King"
select book;
Om variabla books är av en typ som implementerar IQueryable<Book> kommer frågan ovan att skickas till leverantören (inställd på egenskapen IQueryable.Provider ) i form av ett uttrycksträd, en datastruktur som återspeglar strukturen för koden .
Leverantören kan inspektera uttrycksträdet under körning för att bestämma:
- att det finns ett predikat för
Authoregendom förBook; - att den använda jämförelsemetoden är 'lika' (
==); - att värdet det ska vara lika är
"Stephen King".
Med den här informationen kan leverantören översätta C # -frågan till en SQL-fråga under körning och skicka den frågan till en relationsdatabas för att bara hämta de böcker som matchar predikatet:
select *
from Books
where Author = 'Stephen King'
Leverantören kommer att ringas när query är itererad ( IQueryable implementerar IEnumerable ).
(Den leverantör som används i det här exemplet kräver några extra metadata för att veta vilken tabell att fråga och för att veta hur man matchar egenskaperna i C # -klassen till kolumnerna i tabellen, men sådana metadata ligger utanför räckvidden för IQueryable gränssnittet.)