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à
Author
della 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
.)