C# Language
IQueryable-Schnittstelle
Suche…
Übersetzen einer LINQ-Abfrage in eine SQL-Abfrage
Mit den Schnittstellen IQueryable
und IQueryable<T>
können Entwickler eine LINQ-Abfrage (eine sprachintegrierte Abfrage) in eine bestimmte Datenquelle, z. B. eine relationale Datenbank, übersetzen. Nehmen Sie diese in C # geschriebene LINQ-Abfrage:
var query = from book in books
where book.Author == "Stephen King"
select book;
Wenn die Variable books
ein Typ ist, der IQueryable<Book>
implementiert, wird die IQueryable<Book>
Abfrage in Form eines Ausdrucksbaums an den Anbieter übergeben (in der Eigenschaft IQueryable.Provider
). IQueryable.Provider
ist eine Datenstruktur, die die Struktur des Codes widerspiegelt .
Der Provider kann zur Laufzeit den Ausdrucksbaum überprüfen, um Folgendes zu ermitteln:
- dass es ein Prädikat für die
Author
Eigenschaft derBook
Klasse gibt; - dass die verwendete Vergleichsmethode gleich ist (
==
); - dass der Wert, den es gleich sein sollte,
"Stephen King"
.
Mit diesen Informationen kann der Anbieter die C # -Anfrage zur Laufzeit in eine SQL-Abfrage konvertieren und diese Abfrage an eine relationale Datenbank übergeben, um nur die Bücher abzurufen, die dem Prädikat entsprechen:
select *
from Books
where Author = 'Stephen King'
Der Provider aufgerufen wird , wenn die query
Variable iteriert ( IQueryable
implementiert IEnumerable
).
(Der in diesem Beispiel verwendete Provider würde einige zusätzliche Metadaten erfordern, um zu wissen, welche Tabelle abgefragt werden soll, und um zu erfahren, wie die Eigenschaften der C # -Klasse mit den Tabellenspalten IQueryable
werden. IQueryable
Metadaten liegen jedoch außerhalb des Bereichs der IQueryable
Schnittstelle.)