Ausführen einer Unterabfrage für eine GruppierungsoperationPerform a subquery on a grouping operation

In diesem Thema werden zwei verschiedene Möglichkeiten gezeigt, um eine Abfrage zu erstellen, die Quelldaten in Gruppen sortiert und anschließend eine Unterabfrage für jede einzelne Gruppe ausführt.This topic shows two different ways to create a query that orders the source data into groups, and then performs a subquery over each group individually. Die grundlegende Technik in jedem Beispiel besteht darin, die Quellelemente mithilfe einer Fortsetzung namens newGroup zu gruppieren und anschließend eine neue Unterabfrage für newGroup zu erzeugen.The basic technique in each example is to group the source elements by using a continuation named newGroup, and then generating a new subquery against newGroup. Diese Unterabfrage wird für jede neue Gruppe ausgeführt, die von der äußeren Abfrage erstellt wurde.This subquery is run against each new group that is created by the outer query. Beachten Sie, dass in diesem speziellen Beispiel die endgültige Ausgabe keine Gruppe ist, sondern eine flache Sequenz von anonymen Typen.Note that in this particular example the final output is not a group, but a flat sequence of anonymous types.

Weitere Informationen zum Gruppieren finden Sie unter group-Klausel.For more information about how to group, see group clause.

Weitere Informationen zu Fortsetzungen finden Sie unter into.For more information about continuations, see into. Im folgenden Beispiel wird eine Datenstruktur im Arbeitsspeicher als Datenquelle verwendet, jedoch gelten für jede Art von LINQ-Datenquelle die gleichen Prinzipien.The following example uses an in-memory data structure as the data source, but the same principles apply for any kind of LINQ data source.

BeispielExample

Hinweis

Dieses Beispiel enthält Verweise auf Objekte, die im Beispielcode in Abfragen einer Sammlung von Objekten definiert sind.This example contains references to objects that are defined in the sample code in Query a collection of objects.

public void QueryMax()
{
    var queryGroupMax =
        from student in students
        group student by student.Year into studentGroup
        select new
        {
            Level = studentGroup.Key,
            HighestScore =
            (from student2 in studentGroup
             select student2.ExamScores.Average()).Max()
        };

    int count = queryGroupMax.Count();
    Console.WriteLine($"Number of groups = {count}");

    foreach (var item in queryGroupMax)
    {
        Console.WriteLine($"  {item.Level} Highest Score={item.HighestScore}");
    }
}

Siehe auchSee also

LINQ-AbfrageausdrückeLINQ Query Expressions