Freigeben über


Klassifizierung von Standardabfrageoperatoren nach Ausführung (Visual Basic)

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.

Standardabfrageoperator Rückgabetyp Sofortige Ausführung Verzögerte Streamingausführung Verzögerte Nicht-Streaming-Ausführung
Aggregate TSource X
All Boolean X
Any Boolean X
AsEnumerable IEnumerable<T> X
Average Einzelner numerischer Wert X
Cast IEnumerable<T> X
Concat IEnumerable<T> X
Contains Boolean X
Count Int32 X
DefaultIfEmpty IEnumerable<T> X
Distinct IEnumerable<T> X
ElementAt TSource X
ElementAtOrDefault TSource X
Empty IEnumerable<T> X
Except IEnumerable<T> X X
First TSource X
FirstOrDefault TSource X
GroupBy IEnumerable<T> X
GroupJoin IEnumerable<T> X X
Intersect IEnumerable<T> X X
Join IEnumerable<T> X X
Last TSource X
LastOrDefault TSource X
LongCount Int64 X
Max Einzelner numerischer Wert, TSource oder TResult X
Min Einzelner numerischer Wert, TSource oder TResult X
OfType IEnumerable<T> X
OrderBy IOrderedEnumerable<TElement> X
OrderByDescending IOrderedEnumerable<TElement> X
Range IEnumerable<T> X
Repeat IEnumerable<T> X
Reverse IEnumerable<T> X
Select IEnumerable<T> X
SelectMany IEnumerable<T> X
SequenceEqual Boolean X
Single TSource X
SingleOrDefault TSource X
Skip IEnumerable<T> X
SkipWhile IEnumerable<T> X
Sum Einzelner numerischer Wert X
Take IEnumerable<T> X
TakeWhile IEnumerable<T> X
ThenBy IOrderedEnumerable<TElement> X
ThenByDescending IOrderedEnumerable<TElement> X
ToArray TSource-Array X
ToDictionary Dictionary<TKey,TValue> X
ToList IList<T> X
ToLookup ILookup<TKey,TElement> X
Union IEnumerable<T> X
Where IEnumerable<T> X

Siehe auch