C# Language
Interfaccia IQueryable
Ricerca…
Tradurre una query LINQ in una query SQL
Le IQueryable e IQueryable<T> consentono agli sviluppatori di tradurre una query LINQ (una query "language-integrated") in un'origine dati specifica, ad esempio un database relazionale. Prendi questa query LINQ scritta in C #:
var query = from book in books
where book.Author == "Stephen King"
select book;
Se la variabile books è di un tipo che implementa IQueryable<Book> la query precedente viene passata al provider (impostata sulla proprietà IQueryable.Provider ) sotto forma di un albero di espressioni, una struttura di dati che riflette la struttura del codice .
Il provider può ispezionare l'albero delle espressioni in fase di esecuzione per determinare:
- che esiste un predicato per la proprietà
Authordella classeBook; - che il metodo di confronto utilizzato è 'uguale' (
==); - che il valore che dovrebbe eguagliare è
"Stephen King".
Con queste informazioni il provider può tradurre la query C # in una query SQL in fase di runtime e passare quella query a un database relazionale per recuperare solo quei libri che corrispondono al predicato:
select *
from Books
where Author = 'Stephen King'
Il provider viene chiamato quando la variabile di query viene iterata su ( IQueryable implementa IEnumerable ).
(Il provider utilizzato in questo esempio richiede alcuni metadati aggiuntivi per sapere quale tabella interrogare e sapere come abbinare le proprietà della classe C # alle colonne della tabella, ma tali metadati sono al di fuori dell'ambito dell'interfaccia IQueryable .)