C# Language
IQueryable-interface
Zoeken…
Een LINQ-query vertalen naar een SQL-query
Met de IQueryable
en IQueryable<T>
interfaces kunnen ontwikkelaars een LINQ-query (een ' IQueryable<T>
' query) vertalen naar een specifieke gegevensbron, bijvoorbeeld een relationele database. Neem deze LINQ-vraag geschreven in C #:
var query = from book in books
where book.Author == "Stephen King"
select book;
Als de variabele books
van een type is dat IQueryable<Book>
implementeert, wordt de bovenstaande query doorgegeven aan de provider (ingesteld op de eigenschap IQueryable.Provider
) in de vorm van een expressieboom, een gegevensstructuur die de structuur van de code weerspiegelt .
De provider kan de expressieboom tijdens runtime inspecteren om te bepalen:
- dat er een predicaat is voor de eigenschap
Author
van de klasseBook
; - dat de gebruikte vergelijkingsmethode 'gelijk is' (
==
); - dat de waarde die het moet evenaren
"Stephen King"
.
Met deze informatie kan de provider de C # -query tijdens runtime vertalen naar een SQL-query en die query doorgeven aan een relationele database om alleen die boeken op te halen die overeenkomen met het predicaat:
select *
from Books
where Author = 'Stephen King'
De provider wordt aangeroepen wanneer de query
variabele wordt dan herhaald ( IQueryable
implementeert IEnumerable
).
(De provider die in dit voorbeeld wordt gebruikt, heeft wat extra metagegevens nodig om te weten welke tabel moet worden opgevraagd en om te weten hoe eigenschappen van de klasse C # IQueryable
gekoppeld aan kolommen van de tabel, maar dergelijke metagegevens vallen buiten het bereik van de IQueryable
interface.)