Übersicht über Standardabfrageoperatoren (C#)Standard Query Operators Overview (C#)

Die Standardabfrageoperatoren sind die Methoden, die das LINQ-Muster bilden.The standard query operators are the methods that form the LINQ pattern. Die meisten dieser Methoden bearbeiten Sequenzen. Eine Sequenz ist hier ein Objekt, dessen Typ die IEnumerable<T>-Schnittstelle oder die IQueryable<T>-Schnittstelle implementiert.Most of these methods operate on sequences, where a sequence is an object whose type implements the IEnumerable<T> interface or the IQueryable<T> interface. Die Standardabfrageoperatoren stellen Abfragefunktionen wie Filterung, Projektion, Aggregation, Sortierung und weitere bereit.The standard query operators provide query capabilities including filtering, projection, aggregation, sorting and more.

Es gibt zwei Gruppen von LINQ-Standardabfrageoperatoren: Eine Gruppe funktioniert auf Grundlage von Objekten vom Typ IEnumerable<T>, die andere auf Grundlage von Objekten vom Typ IQueryable<T>.There are two sets of LINQ standard query operators, one that operates on objects of type IEnumerable<T> and the other that operates on objects of type IQueryable<T>. Die Methoden, die eine Gruppe bilden, sind statische Member der Klassen Enumerable und Queryable.The methods that make up each set are static members of the Enumerable and Queryable classes, respectively. Sie werden als Erweiterungsmethoden des Typs, auf dessen Grundlage sie funktionieren, definiert.They are defined as extension methods of the type that they operate on. Das bedeutet, dass Sie entweder mit der Syntax für statische Methoden oder für Instanzmethoden aufgerufen werden.This means that they can be called by using either static method syntax or instance method syntax.

Darüber hinaus funktionieren mehrere Standardabfrageoperator-Methoden auf Grundlage anderer Typen als die, die auf IEnumerable<T> oder IQueryable<T> basieren.In addition, several standard query operator methods operate on types other than those based on IEnumerable<T> or IQueryable<T>. Der Typ Enumerable definiert zwei Methoden, die beide auf Grundlage von Objekten vom Typ IEnumerable funktionieren.The Enumerable type defines two such methods that both operate on objects of type IEnumerable. Die Methoden Cast<TResult>(IEnumerable) und OfType<TResult>(IEnumerable) ermöglichen es Ihnen, eine nicht parametrisierte oder nicht generische Auflistung im LINQ-Muster abfragen zu lassen.These methods, Cast<TResult>(IEnumerable) and OfType<TResult>(IEnumerable), let you enable a non-parameterized, or non-generic, collection to be queried in the LINQ pattern. Dies erfolgt durch Erstellen einer stark typisierten Auflistung von Objekten.They do this by creating a strongly-typed collection of objects. Die Klasse Queryable definiert zwei ähnliche Methoden, Cast<TResult>(IQueryable) und OfType<TResult>(IQueryable), die auf Grundlage von Objekten vom Typ Queryable funktionieren.The Queryable class defines two similar methods, Cast<TResult>(IQueryable) and OfType<TResult>(IQueryable), that operate on objects of type Queryable.

Die Standardabfrageoperatoren unterscheiden sich im Zeitpunkt ihrer Ausführung. Dies hängt davon ab, ob sie einen Singleton-Wert oder eine Sequenz von Werten zurückgeben.The standard query operators differ in the timing of their execution, depending on whether they return a singleton value or a sequence of values. Die Methoden, die einen Singleton-Wert zurückgeben (z.B. Average und Sum), werden sofort ausgeführt.Those methods that return a singleton value (for example, Average and Sum) execute immediately. Methoden, die eine Sequenz zurückgeben, verzögern die Abfrageausführung und geben ein auflistbares Objekt zurück.Methods that return a sequence defer the query execution and return an enumerable object.

Bei Methoden, die auf Grundlage von im Speicher enthaltenen Auflistungen funktionieren, d.h. die Methoden, die IEnumerable<T> erweitern, erfasst das zurückgegebene auflistbare Objekt die Argumente, die an die Methode übergeben wurden.In the case of the methods that operate on in-memory collections, that is, those methods that extend IEnumerable<T>, the returned enumerable object captures the arguments that were passed to the method. Wenn dieses Objekt auflistbar ist, tritt die Logik des Abfrageoperators in Kraft, und die Abfrageergebnisse werden zurückgegeben.When that object is enumerated, the logic of the query operator is employed and the query results are returned.

Im Gegensatz dazu implementieren Methoden, die IQueryable<T> erweitern, kein Abfrageverhalten. Sie erstellen stattdessen eine Ausdrucksbaumstruktur, die die auszuführende Abfrage darstellt.In contrast, methods that extend IQueryable<T> do not implement any querying behavior, but build an expression tree that represents the query to be performed. Die Verarbeitung von Abfragen wird vom Quellobjekt IQueryable<T> übernommen.The query processing is handled by the source IQueryable<T> object.

Aufrufe der Abfragemethode können miteinander in eine Abfrage verkettet werden. Dadurch können Abfragen von beliebiger Komplexität sein.Calls to query methods can be chained together in one query, which enables queries to become arbitrarily complex.

Im folgenden Codebeispiel wird veranschaulicht, wie die Standardabfrageoperatoren verwendet werden können, um Informationen zu einer Sequenz zu erhalten.The following code example demonstrates how the standard query operators can be used to obtain information about a sequence.

string sentence = "the quick brown fox jumps over the lazy dog";  
// Split the string into individual words to create a collection.  
string[] words = sentence.Split(' ');  

// Using query expression syntax.  
var query = from word in words  
            group word.ToUpper() by word.Length into gr  
            orderby gr.Key  
            select new { Length = gr.Key, Words = gr };  

// Using method-based query syntax.  
var query2 = words.  
    GroupBy(w => w.Length, w => w.ToUpper()).  
    Select(g => new { Length = g.Key, Words = g }).  
    OrderBy(o => o.Length);  

foreach (var obj in query)  
{  
    Console.WriteLine("Words of length {0}:", obj.Length);  
    foreach (string word in obj.Words)  
        Console.WriteLine(word);  
}  

// This code example produces the following output:  
//  
// Words of length 3:  
// THE  
// FOX  
// THE  
// DOG  
// Words of length 4:  
// OVER  
// LAZY  
// Words of length 5:  
// QUICK  
// BROWN  
// JUMPS   

AbfrageausdruckssyntaxQuery Expression Syntax

Einige der häufiger verwendeten Standardabfrageoperatoren verfügen über eine dedizierte Schlüsselwortsyntax von C# und Visual Basic-Sprache, wodurch sie als Teil eines query-Ausdrucks aufgerufen werden können.Some of the more frequently used standard query operators have dedicated C# and Visual Basic language keyword syntax that enables them to be called as part of a query expression. Weitere Informationen über Standardabfrageoperatoren, die über dedizierte Schlüsselwörter und deren entsprechende Syntax verfügen, finden Sie unter Query Expression Syntax for Standard Query Operators (C#) (Abfrageausdruckssyntax für Standardabfrageoperatoren (C#)).For more information about standard query operators that have dedicated keywords and their corresponding syntaxes, see Query Expression Syntax for Standard Query Operators (C#).

Erweitern der StandardabfrageoperatorenExtending the Standard Query Operators

Sie können die Gruppe von Standardabfrageoperatoren durch Erstellen von domänenspezifischen Methoden erweitern, die für Ihre Zieldomäne oder -technologie geeignet sind.You can augment the set of standard query operators by creating domain-specific methods that are appropriate for your target domain or technology. Sie können die Standardabfrageoperatoren auch mit ihren eigenen Implementierungen ersetzen, die zusätzliche Dienste bieten, z.B. Remote-Auswertung, Abfrageübersetzung und Optimierung.You can also replace the standard query operators with your own implementations that provide additional services such as remote evaluation, query translation, and optimization. Ein Beispiel finden Sie unter AsEnumerable.See AsEnumerable for an example.

Über die folgenden Links gelangen Sie zu Themen, die Ihnen weitere Informationen über die verschiedenen Standardabfrageoperatoren basierend auf deren Funktionen bieten.The following links take you to topics that provide additional information about the various standard query operators based on functionality.

Sorting Data (C#) (Sortieren von Daten (C#))Sorting Data (C#)

Set Operations (C#) (Set-Vorgänge (C#))Set Operations (C#)

Filtering Data (C#) (Filtern von Daten (C#))Filtering Data (C#)

Quantifier Operations (C#) (Quantifizierer-Vorgänge (C#))Quantifier Operations (C#)

Projection Operations (C#) (Projektionsvorgänge (C#))Projection Operations (C#)

Partitioning Data (C#) (Partitionieren von Daten (C#))Partitioning Data (C#)

Join Operations (C#) (Verknüpfungsvorgänge (C#))Join Operations (C#)

Grouping Data (C#) (Gruppieren von Daten (C#))Grouping Data (C#)

Generation Operations (C#) (Generierungsvorgänge (C#))Generation Operations (C#)

quality Operations (C#) (Gleichheitsvorgänge (C#))Equality Operations (C#)

Element Operations (C#) (Elementvorgänge (C#))Element Operations (C#)

Converting Data Types (C#) (Konvertieren von Datentypen (C#))Converting Data Types (C#)

Concatenation Operations (C#) (Verkettungsvorgänge (C#))Concatenation Operations (C#)

Aggregation Operations (C#) (Aggregationsvorgänge (C#))Aggregation Operations (C#)

Siehe auchSee Also

Enumerable
Queryable
Introduction to LINQ Queries (C#) (Einführung in LINQ-Abfragen (C#))Introduction to LINQ Queries (C#)
Abfrageausdruckssyntax für Standardabfrageoperatoren (c#)Query Expression Syntax for Standard Query Operators (C#)
Classification of Standard Query Operators by Manner of Execution (C#) (Klassifizierung von Standardabfrageoperatoren nach Ausführungsarten (C#))Classification of Standard Query Operators by Manner of Execution (C#)
ErweiterungsmethodenExtension Methods