(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

Übersicht über Standardabfrageoperatoren

Bei den Standardabfrageoperatoren handelt es sich um die Methoden, die das Sprachintegrierte Abfrage (Language-Integrated Query, LINQ)-Muster bilden. Diese Methoden verwenden meist Sequenzen. Eine Sequenz ist ein Objekt, dessen Typ die IEnumerable<T>-Schnittstelle oder die IQueryable<T>-Schnittstelle implementiert. Die Standardabfrageoperatoren stellen Abfragefunktionen bereit wie Filterung, Projektion, Aggregation, Sortierung und mehr.

Es gibt zwei Gruppen von LINQ-Standardabfrageoperatoren: eine für Objekte mit dem Typ IEnumerable<T> und eine andere für Objekte mit dem Typ IQueryable<T>. Die Methoden, die die einzelnen Gruppen ausmachen, sind statische Member der Enumerable-Klasse bzw. der Queryable-Klasse. Sie werden als Erweiterungsmethoden des Typs definiert, für den sie ausgeführt werden. Dies bedeutet, dass sie entweder unter Verwendung einer Syntax für statische Methoden oder einer Syntax für Instanzenmethoden aufgerufen werden können.

Verschiedene Standardabfrageoperator-Methoden werden darüber hinaus für andere Typen als die auf IEnumerable<T> oder IQueryable<T> basierenden Typen verwendet. Der Enumerable-Typ definiert zwei dieser Methoden, die beide auf Objekte des Typs IEnumerable angewendet werden. Mit diesen Methoden (Cast<TResult>(IEnumerable) und OfType<TResult>(IEnumerable)) können Sie im LINQ-Muster die Abfrage einer nicht parametrisierten oder nicht generischen Auflistung ermöglichen. Zu diesem Zweck wird von den Methoden eine stark typisierte Objektauflistung erstellt. In der Queryable-Klasse sind zwei ähnliche Methoden (Cast<TResult>(IQueryable) und OfType<TResult>(IQueryable)) definiert, die auf Objekte des Typs Queryable angewendet werden.

Die Standardabfrageoperatoren unterscheiden sich im Hinblick auf den Ausführungszeitpunkt danach, ob sie einen Singletonwert oder eine Wertesequenz zurückgeben. Methoden, die einen Singletonwert zurückgeben (z. B. Average und Sum) werden sofort ausgeführt. Methoden, die eine Sequenz zurückgeben, verzögern die Abfrageausführung und geben ein aufzählbares Objekt zurück.

Bei Methoden, die für Auflistungen im Arbeitsspeicher ausgeführt werden, also Methoden, die IEnumerable<T> erweitern, erfasst das zurückgegebene aufzählbare Objekt die an die Methode übergebenen Argumente. Wenn dieses Objekt aufgezählt wird, wird die Logik des Abfrageoperators angewendet, und die Abfrageergebnisse werden zurückgegeben.

Methoden, die IQueryable<T> erweitern, implementieren im Gegensatz dazu kein Abfrageverhalten, erstellen jedoch eine Ausdrucksbaumstruktur, die die auszuführende Abfrage darstellt. Die Abfragebearbeitung wird vom IQueryable<T>-Quellobjekt behandelt.

Aufrufe der Abfragemethoden können in einer Abfrage verkettet werden, wodurch Abfragen beliebig komplex werden können.

Im folgenden Codebeispiel wird veranschaulicht, wie die Standardabfrageoperatoren verwendet werden können, um Informationen zu einer Sequenz abzurufen.


           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 



Einige der häufiger verwendeten Standardabfrageoperatoren verfügen über eine dedizierte Syntax für C#- und Visual Basic-Schlüsselwörter, durch die sie als Teil eines Abfrageausdrucks aufgerufen werden können. Weitere Informationen über Standardabfrageoperatoren, die über dedizierte Schlüsselwörter verfügen, sowie über deren entsprechende Syntax finden Sie unter Abfrageausdruckssyntax für Standardabfrageoperatoren.

Sie können die Gruppe von Standardabfrageoperatoren vergrößern, indem Sie domänenspezifische Methoden erstellen, die für Ihre Zieldomäne oder -technologie geeignet sind. Außerdem können Sie die Standardabfrageoperatoren durch eigene Implementierungen ersetzen, die zusätzliche Dienste wie Remoteauswertung, Abfrageübersetzung und Optimierung bieten. Ein Beispiel finden Sie unter AsEnumerable<TSource>.

Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Vielen Dank für Ihr Feedback.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft. Alle Rechte vorbehalten.