Comment : effectuer une sous-requête sur une opération de regroupement (Guide de programmation C#)

Mise à jour : novembre 2007

Cette rubrique présente deux façons différentes de créer une requête qui organise les données sources en groupes, puis effectue une sous-requête sur chaque groupe individuellement. La technique de base dans chaque exemple est de grouper les éléments source en utilisant une continuation nommée newGroup, puis de générer ensuite une nouvelle sous-requête sur newGroup. Cette sous-requête est exécutée sur chaque nouveau groupe créé par la requête externe. Notez que dans cet exemple particulier, la sortie définitive n'est pas un groupe mais une séquence en deux dimensions de types anonymes.

Pour plus d'informations sur la manière de grouper, consultez group, clause (Référence C#).

Pour plus d'informations sur les continuations, consultez into (Référence C#). L'exemple suivant utilise une structure de données en mémoire comme source de données, mais les mêmes principes s'appliquent à tout type de source de données LINQ.

Exemple

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);
    }
}

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.

When you adapt this method to your own application, remember that LINQ requires version 3.5 of the .NET Framework, and the project must contain a reference to System.Core.dll and a using directive for System.Linq. LINQ to SQL, LINQ to XML and LINQ to DataSet types require additional usings and references. Pour plus d'informations, consultez Comment : créer un projet LINQ.

Voir aussi

Concepts

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