Como executar uma subconsulta em uma operação de agrupamento (Guia de Programação em C#)
Este tópico mostra duas maneiras diferentes para criar uma consulta que classifica os dados de origem em grupos e, em seguida, executa uma subconsulta sobre cada grupo individualmente. A técnica básica em cada exemplo é agrupar elementos de origem usando um continuação chamado newGroupe gerar uma subconsulta nova contra newGroup. Esta subconsulta é executada em relação a cada novo grupo é criado pela consulta externa. Observe que, nesse exemplo específico da saída final, não é um grupo, mas uma simples seqüência de tipos anônimos.
Para obter mais informações sobre como grupo, consulte Cláusula group (Referência de C#).
Para obter mais informações sobre a continuação, consulte into (Referência de C#). O exemplo a seguir usa uma estrutura de dados na memória como fonte de dados, mas os mesmos princípios se aplicam para qualquer tipo de LINQ fonte de dados.
Exemplo
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);
}
}
Compilando o código
Este exemplo contém referências a objetos que são definidos no aplicativo de amostra em Como consultar uma coleção de objetos (Guia de Programação em C#). Para compilar e executar esse método, colá-lo na StudentClass classe nesse aplicativo e adicione uma chamada a partir do Main método.
Quando você adapta este método para seu próprio aplicativo, lembre-se de que o LINQ requer a versão 3.5 da .NET Framework, e o projeto deve conter uma referência a System.Core.dll e o uso de uma diretriz para System. LINQ. LINQ to SQL, LINQ to XML e LINQ to DataSet tipos exigem referências e usos adicionais. Para obter mais informações, consulte Como criar um projeto LINQ.