Comment : effectuer une sous-requête sur une opération de regroupement (Guide de programmation C#)
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
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 = {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.
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.