Klassifizierung von Standardabfrageoperatoren nach Ausführungsarten
Es gibt zwei Hauptausführungsarten von Implementierungen der Standardabfrageoperatormethoden von LINQ-zu-Objekten: die unmittelbare und die verzögerte Ausführung. Abfrageoperatoren mit verzögerter Ausführung können darüber hinaus in zwei Kategorien unterteilt werden: Streaming und Nicht-Streaming-Operatoren. Wenn Sie wissen, wie die einzelnen Operatoren ausgeführt werden, verstehen Sie das Ergebnis einer bestimmten Abfrage möglicherweise besser. Das gilt besonders dann, wenn die Datenquelle wechselt oder eine Abfrage auf Grundlage einer anderen Abfrage erstellt wird. In diesem Thema werden die Standardabfrageoperatoren nach ihrer Ausführungsart klassifiziert.
Ausführungsarten
Unmittelbar
Unmittelbare Ausführung bedeutet, dass an der Stelle im Code, an der die Abfrage deklariert ist, die Datenquelle gelesen und die Operation ausgeführt wird. Alle Standardabfrageoperatoren, die ein einzelnes, nicht aufzählbares Ergebnis zurückgeben, werden unmittelbar ausgeführt.
Verzögert
Verzögerte Ausführung bedeutet, dass die Operation nicht an der Stelle im Code ausgeführt wird, an der die Abfrage deklariert ist. Die Operation wird nur ausgeführt, wenn die Abfragevariable aufgezählt wird, z. B. mithilfe einer foreach-Anweisung (For Each in Visual Basic). Das bedeutet, dass die Ergebnisse der Ausführung einer Abfrage mehr vom Inhalt der Datenquelle zum Zeitpunkt der Ausführung der Abfrage abhängig sind, als zum Zeitpunkt der Definition. Wenn die Abfragevariable mehrmals aufgelistet wird, kann das Ergebnis jedes Mal anders ausfallen Standardabfrageoperatoren mit dem Rückgabetyp IEnumerable oder IOrderedEnumerable werden nahezu in allen Fällen verzögert ausgeführt.
Verzögert ausgeführte Abfrageoperatoren können zusätzlich als Streaming- bzw. Nicht-Streaming-Operatoren klassifiziert werden.
Streaming
Streaming-Operatoren müssen vor dem Bereitstellen von Elementen nicht die gesamten Quelldaten lesen. Zum Zeitpunkt der Ausführung wird die Operation eines Streaming-Operators für jedes gelesene Quellelement ausgeführt, und das Element wird ggf. bereitgestellt. Die Quellelemente werden von Streaming-Operatoren so lange gelesen, bis ein Ergebniselement erzeugt werden kann. Das bedeutet, dass möglicherweise mehrere Quellelemente gelesen werden müssen, um ein Ergebniselement zu erzeugen.
Nicht-Streaming
Nicht-Streaming-Operatoren müssen vor dem Bereitstellen eines Ergebniselements die gesamten Quelldaten lesen. Zu dieser Kategorie zählen Vorgänge wie beispielsweise das Sortieren oder Gruppieren. Bei der Ausführung werden von Nicht-Streaming-Operatoren zunächst die gesamten Quelldaten gelesen und in eine Datenstruktur übertragen. Anschließend wird der Vorgang ausgeführt, und das Ergebnis wird bereitgestellt.
Klassifizierungstabelle
In der folgenden Tabelle werden alle Standardabfrageoperatormethoden nach Ausführungsmethoden klassifiziert.
Hinweis
Wenn ein Operator in zwei Spalten gekennzeichnet ist, gehören zwei Eingabesequenzen zu der Operation, und beide Sequenzen werden unterschiedlich ausgewertet.In diesen Fällen wird immer die erste Sequenz in der Parameterliste verzögert und mit Streaming ausgewertet.
Standardabfrageoperator |
Rückgabetyp |
Unmittelbare Ausführung |
Verzögerte Streaming-Ausführung |
Verzögerte Nicht-Streaming-Ausführung |
---|---|---|---|---|
TSource |
X |
|
|
|
X |
|
|
||
X |
|
|
||
|
X |
|
||
Einzelner numerischer Wert |
X |
|
|
|
|
X |
|
||
|
X |
|
||
X |
|
|
||
X |
|
|
||
|
X |
|
||
|
X |
|
||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
X |
|
|
||
|
X |
X |
||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
|
|
X |
||
|
X |
X |
||
|
X |
X |
||
|
X |
X |
||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
X |
|
|
||
Einzelner numerischer Wert, TSource oder TResult |
X |
|
|
|
Einzelner numerischer Wert, TSource oder TResult |
X |
|
|
|
|
X |
|
||
|
|
X |
||
|
|
X |
||
|
X |
|
||
|
X |
|
||
|
|
X |
||
|
X |
|
||
|
X |
|
||
X |
|
|
||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
|
X |
|
||
|
X |
|
||
Einzelner numerischer Wert |
X |
|
|
|
|
X |
|
||
|
X |
|
||
|
|
X |
||
|
|
X |
||
TSource-Array |
X |
|
|
|
X |
|
|
||
X |
|
|
||
X |
|
|
||
|
X |
|
||
|
X |
|
Siehe auch
Referenz
Konzepte
Übersicht über Standardabfrageoperatoren