Compartilhar via


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.

Consulte também

Conceitos

Expressões de consulta LINQ (Guia de Programação em C#)