Klassifizierung von Standardabfrageoperatoren nach Ausführungsarten
Aktualisiert: November 2007
Es gibt zwei Hauptausführungsarten von Implementierungen der Standardabfrageoperatormethoden von LINQ-zu-Objekten: die unmittelbare und die verzögerte Ausführung. Zusätzlich lassen sich die Abfrageoperatoren für die verzögerte Ausführung in zwei Kategorien einteilen: Streaming und Nicht-Streaming. Wenn Sie mit der Ausführung der verschiedenen Abfrageoperatoren vertraut sind, erleichtert dies das Verständnis der Ergebnisse konkreter Abfragen. 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 mehrfach aufgezählt wird, können die Ergebnisse jedes Mal unterschiedlich ausfallen. Nahezu alle Standardabfrageoperatoren mit dem Rückgabetyp IEnumerable<T> oder dem Rückgabetyp IOrderedEnumerable<TElement> werden 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
Konzepte
Übersicht über Standardabfrageoperatoren
Abfrageausdruckssyntax für Standardabfrageoperatoren