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 Author egendom för Book ;
  • 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.)



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow