Klassifizierung von Standardabfrageoperatoren nach Ausführungsarten (C#)Classification of Standard Query Operators by Manner of Execution (C#)

Die LINQ to Objects-Implementierungen des Standardabfrageoperators werden mit einer von zwei möglichen Arten ausgeführt: direkt oder zurückgestellt.The LINQ to Objects implementations of the standard query operator methods execute in one of two main ways: immediate or deferred. Abfrageoperatoren, die die verzögerte Ausführung verwenden, können darüber hinaus in zwei Kategorien unterteilt werden: Streaming und Nicht-Streaming.The query operators that use deferred execution can be additionally divided into two categories: streaming and non-streaming. Wenn Sie wissen, wie die einzelnen Abfrageoperatoren ausgeführt werden, erleichtert dies das Verständnis der Ergebnisse, die Sie von einer Abfrage erhalten.If you know how the different query operators execute, it may help you understand the results that you get from a given query. Dies ist insbesondere dann der Fall, wenn die Datenquelle geändert wird oder wenn Sie eine Abfrage auf Grundlage einer anderen Abfrage erstellen.This is especially true if the data source is changing or if you are building a query on top of another query. In diesem Thema werden die Standardabfrageoperatoren gemäß ihrer Ausführungsarten klassifiziert.This topic classifies the standard query operators according to their manner of execution.

Arten der AusführungManners of Execution

DirektImmediate

Direkte Ausführung bedeutet, dass die Datenquelle gelesen wird und die Operation an dem Zeitpunkt im Code ausgeführt wird, an dem die Abfrage deklariert wird.Immediate execution means that the data source is read and the operation is performed at the point in the code where the query is declared. Alle Standardabfrageoperatoren, die ein einzelnes, nicht aufzählbares Ergebnis zurückgeben, werden sofort ausgeführt.All the standard query operators that return a single, non-enumerable result execute immediately.

ZurückgestelltDeferred

Zurückgestellte Ausführung bedeutet, dass der Vorgang nicht zum Zeitpunkt im Code ausgeführt wird, an dem die Abfrage deklariert wird.Deferred execution means that the operation is not performed at the point in the code where the query is declared. Der Vorgang erfolgt nur, wenn die Abfragevariable aufgezählt wird, z.B. durch Verwendung einer foreach-Anweisung.The operation is performed only when the query variable is enumerated, for example by using a foreach statement. Dies bedeutet, dass die Ergebnisse der Ausführung der Abfrage vom Inhalt der Datenquelle zum Zeitpunkt der Abfrageausführung, nicht der Abfragedefinition abhängen.This means that the results of executing the query depend on the contents of the data source when the query is executed rather than when the query is defined. Wenn die Abfragevariable mehrfach aufgezählt wird, können die Ergebnisse jedes Mal abweichen.If the query variable is enumerated multiple times, the results might differ every time. Fast alle Standardabfrageoperatoren, deren Rückgabetyp IEnumerable<T> oder IOrderedEnumerable<TElement> ist, werden verzögert ausgeführt.Almost all the standard query operators whose return type is IEnumerable<T> or IOrderedEnumerable<TElement> execute in a deferred manner.

Abfrageoperatoren, die die verzögerte Ausführung verwenden, können zusätzlich als Streaming und Nicht-Streaming klassifiziert werden.Query operators that use deferred execution can be additionally classified as streaming or non-streaming.

StreamingStreaming

Streaming-Operatoren müssen nicht alle Quelldaten lesen, bevor sie Elemente liefern.Streaming operators do not have to read all the source data before they yield elements. Zum Zeitpunkt der Ausführung führt ein Streaming-Operator seine Operation auf jedem Quellelement aus, während es gelesen wird, und liefert ggf. die Elemente.At the time of execution, a streaming operator performs its operation on each source element as it is read and yields the element if appropriate. Ein Streaming-Operator liest weiterhin Quellelemente, bis ein Ergebniselement erzeugt werden kann.A streaming operator continues to read source elements until a result element can be produced. Dies bedeutet, dass mehr als ein Quellelement womöglich gelesen werden kann, um ein Ergebniselement zu erzeugen.This means that more than one source element might be read to produce one result element.

Nicht-StreamingNon-Streaming

Nicht-Streaming-Operatoren müssen alle Quelldaten lesen, bevor sie ein Ergebniselement liefern können.Non-streaming operators must read all the source data before they can yield a result element. Vorgänge wie das Sortieren oder Gruppieren fallen unter diese Kategorie.Operations such as sorting or grouping fall into this category. Zum Zeitpunkt der Ausführung lesen Nicht-Streaming-Operatoren alle Quelldaten, fügen sie in eine Datenstruktur ein, führen den Vorgang aus und liefern die Elemente, die sich ergeben.At the time of execution, non-streaming query operators read all the source data, put it into a data structure, perform the operation, and yield the resulting elements.

KlassifizierungstabelleClassification Table

In der folgenden Tabelle wird jede Standardabfrageoperator-Methode laut der Ausführungsmethode klassifiziert.The following table classifies each standard query operator method according to its method of execution.

Hinweis

Wenn ein Operator in zwei Spalten gekennzeichnet ist, werden zwei Eingabesequenzen in den Vorgang einbezogen, und jede Sequenz wird unterschiedlich ausgewertet.If an operator is marked in two columns, two input sequences are involved in the operation, and each sequence is evaluated differently. In diesen Fällen ist es immer die erste Sequenz in der Parameterliste, die verzögert und mit der Nicht-Straming-Methode ausgewertet wird.In these cases, it is always the first sequence in the parameter list that is evaluated in a deferred, streaming manner.

StandardabfrageoperatorStandard Query Operator RückgabetypReturn Type Sofortige AusführungImmediate Execution Verzögerte Streaming-AusführungDeferred Streaming Execution Verzögerte Nicht-Streaming-AusführungDeferred Non-Streaming Execution
Aggregate TSourceTSource XX
All Boolean XX
Any Boolean XX
AsEnumerable IEnumerable<T> XX
Average Einzelner numerischer WertSingle numeric value XX
Cast IEnumerable<T> XX
Concat IEnumerable<T> XX
Contains Boolean XX
Count Int32 XX
DefaultIfEmpty IEnumerable<T> XX
Distinct IEnumerable<T> XX
ElementAt TSourceTSource XX
ElementAtOrDefault TSourceTSource XX
Empty IEnumerable<T> XX
Except IEnumerable<T> XX XX
First TSourceTSource XX
FirstOrDefault TSourceTSource XX
GroupBy IEnumerable<T> XX
GroupJoin IEnumerable<T> XX XX
Intersect IEnumerable<T> XX XX
Join IEnumerable<T> XX XX
Last TSourceTSource XX
LastOrDefault TSourceTSource XX
LongCount Int64 XX
Max Einzelner numerischer Wert, TSource oder TResultSingle numeric value, TSource, or TResult XX
Min Einzelner numerischer Wert, TSource oder TResultSingle numeric value, TSource, or TResult XX
OfType IEnumerable<T> XX
OrderBy IOrderedEnumerable<TElement> XX
OrderByDescending IOrderedEnumerable<TElement> XX
Range IEnumerable<T> XX
Repeat IEnumerable<T> XX
Reverse IEnumerable<T> XX
Select IEnumerable<T> XX
SelectMany IEnumerable<T> XX
SequenceEqual Boolean XX
Single TSourceTSource XX
SingleOrDefault TSourceTSource XX
Skip IEnumerable<T> XX
SkipWhile IEnumerable<T> XX
Sum Einzelner numerischer WertSingle numeric value XX
Take IEnumerable<T> XX
TakeWhile IEnumerable<T> XX
ThenBy IOrderedEnumerable<TElement> XX
ThenByDescending IOrderedEnumerable<TElement> XX
ToArray TSource-ArrayTSource array XX
ToDictionary Dictionary<TKey,TValue> XX
ToList IList<T> XX
ToLookup ILookup<TKey,TElement> XX
Union IEnumerable<T> XX
Where IEnumerable<T> XX

Siehe auchSee Also

Enumerable
Standard Query Operators Overview (C#) (Übersicht der Standardabfrageoperatoren (C#))Standard Query Operators Overview (C#)
Abfrageausdruckssyntax für Standardabfrageoperatoren (c#)Query Expression Syntax for Standard Query Operators (C#)
LINQ to Objects (C#)LINQ to Objects (C#)