Comment : créer un groupe imbriqué (Guide de programmation C#)

L'exemple suivant indique comment créer des groupes imbriqués dans une expression de requête LINQ.Chaque groupe créé par année d'étude ou niveau d'étude est subdivisé en groupes par noms d'individus.

Exemple

public void QueryNestedGroups()
{
    var queryNestedGroups =
        from student in students
        group student by student.Year into newGroup1
        from newGroup2 in
            (from student in newGroup1
             group student by student.LastName)
        group newGroup2 by newGroup1.Key;

    // Three nested foreach loops are required to iterate 
    // over all elements of a grouped group. Hover the mouse 
    // cursor over the iteration variables to see their actual type.
    foreach (var outerGroup in queryNestedGroups)
    {
        Console.WriteLine("DataClass.Student Level = {0}", outerGroup.Key);
        foreach (var innerGroup in outerGroup)
        {
            Console.WriteLine("\tNames that begin with: {0}", innerGroup.Key);
            foreach (var innerGroupElement in innerGroup)
            {
                Console.WriteLine("\t\t{0} {1}", innerGroupElement.LastName, innerGroupElement.FirstName);
            }
        }
    }
}
/*
 Output:
DataClass.Student Level = SecondYear
        Names that begin with: Adams
                Adams Terry
        Names that begin with: Garcia
                Garcia Hugo
        Names that begin with: Omelchenko
                Omelchenko Svetlana
DataClass.Student Level = ThirdYear
        Names that begin with: Fakhouri
                Fakhouri Fadi
        Names that begin with: Garcia
                Garcia Debra
        Names that begin with: Tucker
                Tucker Lance
DataClass.Student Level = FirstYear
        Names that begin with: Feng
                Feng Hanying
        Names that begin with: Mortensen
                Mortensen Sven
        Names that begin with: Tucker
                Tucker Michael
DataClass.Student Level = FourthYear
        Names that begin with: Garcia
                Garcia Cesar
        Names that begin with: O'Donnell
                O'Donnell Claire
        Names that begin with: Zabokritski
                Zabokritski Eugene        
 */

Notez que trois boucles foreach imbriquées sont requises pour itérer au sein des éléments internes d'un groupe imbriqué.

Compilation du code

Cet exemple contient des références aux objets définis dans l'exemple d'application dans Comment : interroger une collection d'objets (Guide de programmation C#).Pour compiler et exécuter cette méthode, collez-la dans la classe StudentClass de cette application et ajoutez-lui un appel de la méthode Main.

Lorsque vous adaptez cette méthode à votre propre application, souvenez-vous que LINQ requiert la version 3.5 du .NET Framework et que le projet doit contenir une référence à System.Core.dll et une directive using pour System.Linq.Les types LINQ to SQL, LINQ to XML et LINQ to DataSet requièrent des utilisations et des références supplémentaires.Pour plus d'informations, consultez Comment : créer un projet LINQ.

Voir aussi

Concepts

Expressions de requête LINQ (Guide de programmation C#)