Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die LINQ to Objects-Implementierungen der Standardabfrageoperatormethoden werden auf eine von zwei Hauptmethoden ausgeführt: sofort oder verzögert. Die Abfrageoperatoren, die die verzögerte Ausführung verwenden, können zusätzlich in zwei Kategorien unterteilt werden: Streaming und Nicht-Streaming. Wenn Sie wissen, wie die verschiedenen Abfrageoperatoren ausgeführt werden, können Sie die Ergebnisse verstehen, die Sie aus einer bestimmten Abfrage erhalten. Dies gilt insbesondere, wenn sich die Datenquelle ändert oder wenn Sie eine Abfrage über eine andere Abfrage erstellen. In diesem Thema werden die Standardabfrageoperatoren entsprechend ihrer Ausführung klassifiziert.
Ausführungsarten
Sofortig
Die sofortige Ausführung bedeutet, dass die Datenquelle gelesen wird und der Vorgang an der Stelle im Code ausgeführt wird, an der die Abfrage deklariert wird. Alle Standardabfrageoperatoren, die ein einzelnes, nicht aufzählbares Ergebnis zurückgeben, werden sofort ausgeführt.
Zurückgestellt
Verzögerte Ausführung bedeutet, dass der Vorgang nicht am Punkt im Code ausgeführt wird, an dem die Abfrage deklariert wird. Der Vorgang wird nur ausgeführt, wenn die Abfragevariable aufgezählt wird, z. B. mithilfe einer For Each Anweisung. Dies bedeutet, dass die Ergebnisse der Ausführung der Abfrage vom Inhalt der Datenquelle abhängen, wenn die Abfrage ausgeführt wird und nicht, wenn die Abfrage definiert ist. Wenn die Abfragevariable mehrmals aufgezählt wird, können sich die Ergebnisse jedes Mal unterscheiden. Fast alle Standardabfrageoperatoren, deren Rückgabetyp IEnumerable<T> oder IOrderedEnumerable<TElement> ist, werden verzögert ausgeführt.
Abfrageoperatoren, die verzögerte Ausführung verwenden, können zusätzlich als Streaming oder Nicht-Streaming klassifiziert werden.
Streamen
Streamingoperatoren müssen nicht alle Quelldaten lesen, bevor sie Elemente liefern. Zum Zeitpunkt der Ausführung führt ein Streamingoperator seinen Vorgang für jedes Quellelement aus, wie es gelesen wird, und gibt das Element bei Bedarf zurück. Ein Streamingoperator liest weiterhin Quellelemente, bis ein Ergebniselement erstellt werden kann. Dies bedeutet, dass mehrere Quellelemente gelesen werden können, um ein Ergebniselement zu erzeugen.
Nicht-Streaming
Nicht-Streamingoperatoren müssen alle Quelldaten lesen, bevor sie ein Ergebniselement liefern können. Vorgänge wie Sortieren oder Gruppieren fallen in diese Kategorie. Zum Zeitpunkt der Ausführung lesen Nicht-Streaming-Abfrageoperatoren alle Quelldaten, fügen sie in eine Datenstruktur ein, führen den Vorgang aus und liefern die resultierenden Elemente.
Klassifizierungstabelle
In der folgenden Tabelle werden die einzelnen Standardabfrageoperatormethoden entsprechend ihrer Ausführungsmethode klassifiziert.
Hinweis
Wenn ein Operator in zwei Spalten markiert ist, sind zwei Eingabesequenzen an dem Vorgang beteiligt, und jede Sequenz wird unterschiedlich ausgewertet. In diesen Fällen ist es immer die erste Sequenz in der Parameterliste, die auf verzögerte, streaming-Weise ausgewertet wird.