C# Language
Interface IQueryable
Recherche…
Traduire une requête LINQ en requête SQL
Les interfaces IQueryable
et IQueryable<T>
permettent aux développeurs de traduire une requête LINQ (une requête «intégrée au langage») en une source de données spécifique, par exemple une base de données relationnelle. Prenez cette requête LINQ écrite en C #:
var query = from book in books
where book.Author == "Stephen King"
select book;
Si la variable books
est d'un type qui implémente IQueryable<Book>
la requête ci-dessus est transmise au fournisseur (défini sur la propriété IQueryable.Provider
) sous la forme d'un arbre d'expression, une structure de données qui reflète la structure du code. .
Le fournisseur peut inspecter l'arborescence d'expression à l'exécution pour déterminer:
- qu'il existe un prédicat pour la propriété
Author
de la classeBook
; - que la méthode de comparaison utilisée est 'égale' (
==
); - que la valeur à égaler est
"Stephen King"
.
Avec ces informations, le fournisseur peut traduire la requête C # en requête SQL à l'exécution et transmettre cette requête à une base de données relationnelle pour extraire uniquement les livres correspondant au prédicat:
select *
from Books
where Author = 'Stephen King'
Le fournisseur est appelé lorsque la variable de query
est itérée sur ( IQueryable
implémente IEnumerable
).
(Le fournisseur utilisé dans cet exemple nécessiterait des métadonnées supplémentaires pour savoir quelle table interroger et savoir comment faire correspondre les propriétés de la classe C # aux colonnes de la table, mais ces métadonnées ne relèvent pas de l'interface IQueryable
.)