Gewusst wie: Ausführen einer Unterabfrage für eine Gruppierungsoperation (C#-Programmierhandbuch)

Aktualisiert: November 2007

Dieses Thema zeigt zwei verschiedene Wege, wie Sie eine Abfrage erstellen können, die die Quelldaten in Gruppen sortiert und dann eine Unterabfrage für jede einzelne Gruppe durchführt. Die zugrunde liegende Technik in jedem Beispiel besteht darin, die Quellelemente zu gruppieren, indem Sie eine Fortsetzung mit dem Namen newGroup verwenden und dann eine neue Unterabfrage für newGroup erstellen. Diese Unterabfrage wird für jede neue Gruppe ausgeführt, die von der äußeren Abfrage erstellt wird. Beachten Sie, dass in diesem speziellen Beispiel die Endausgabe keine Gruppe ist, sondern eine flache Sequenz mit anonymen Typen.

Weitere Informationen zum Gruppieren finden Sie unter group-Klausel (C#-Referenz).

Weitere Informationen zu Fortsetzungen finden Sie unter into (C#-Referenz). Im folgenden Beispiel wird eine speicherinterne Datenstruktur als Datenquelle verwendet, die gleichen Prinzipien gelten jedoch auch für andere LINQ-Datenquellen.

Beispiel

private static 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 = {0}", count);

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

Kompilieren des Codes

Dieses Beispiel enthält Verweise auf Objekte, die in der Beispielanwendung in Gewusst wie: Abfragen einer Auflistung von Objekten (C#-Programmierhandbuch) definiert werden. Um diese Methode zu kompilieren und auszuführen, fügen Sie sie in die StudentClass-Klasse dieser Anwendung ein, und fügen Sie ihr von der Main-Methode einen Aufruf hinzu.

Wenn Sie diese Methode an Ihre eigene Anwendung anpassen, beachten Sie, dass LINQ .NET Framework Version 3.5 benötigt und dass das Projekt einen Verweis auf System.Core.dll enthalten und eine Direktive für System.Linq verwenden muss. LINQ-to-SQL-, LINQ-to-XML- und LINQ-to-DataSet-Typen erfordern zusätzliche Usings und Verweise. Weitere Informationen hierzu finden Sie unter Gewusst wie: Erstellen eines LINQ-Projekts.

Siehe auch

Konzepte

LINQ-Abfrageausdrücke (C#-Programmierhandbuch)