Procedura: eseguire una sottoquery su un'operazione di raggruppamento (Guida per programmatori C#)
Aggiornamento: novembre 2007
In questo argomento sono illustrati due modi diversi per creare una query che ordina i dati di origine in gruppi e quindi esegue una sottoquery su ogni singolo gruppo. La tecnica di base in ogni esempio consiste nel raggruppare gli elementi di origine utilizzando una continuazione denominata newGroup e generando quindi una nuova sottoquery a fronte di newGroup. Questa sottoquery viene eseguita a fronte di ogni nuovo gruppo creato dalla query esterna. Si noti che in questo particolare esempio l'output finale non è un gruppo, ma una sequenza semplice di tipi anonimi.
Per ulteriori informazioni su come eseguire il raggruppamento, vedere Clausola group (Riferimento C#).
Per ulteriori informazioni sulle continuazioni, vedere into (Riferimenti per C#). Nell'esempio seguente viene utilizzata una struttura di dati in memoria come origine dati, ma gli stessi principi sono validi per qualsiasi tipo di origine dati di LINQ.
Esempio
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);
}
}
Compilazione del codice
In questo esempio sono contenuti i riferimenti a oggetti definiti nell'applicazione di esempio in Procedura: eseguire una query su un insieme di oggetti (Guida per programmatori C#). Per compilare ed eseguire questo metodo, incollarlo nella classe StudentClass in tale applicazione e aggiungervi una chiamata dal metodo 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. Per ulteriori informazioni, vedere la classe Procedura: creare un progetto LINQ.