Agrupando consultas com LINQ em C#

Agrupando consultas com LINQ em C#

LINQ (Language Integrated Query) é uma ferramenta no C# que permite realizar consultas em coleções de dados de uma maneira declarativa. Uma das operações mais comuns e úteis no LINQ é o agrupamento de dados, funcionalidade fundamental quando você precisa organizar e sumarizar registros de acordo com certas chaves.

O que é agrupamento no LINQ?

O agrupamento em LINQ é o processo de organizar os elementos de uma coleção em grupos com base em uma chave específica. É semelhante ao conceito de “GROUP BY” em SQL. O resultado do agrupamento é uma coleção de grupos, em que cada grupo contém uma chave e uma coleção de itens que compartilham essa chave.

Estrutura básica do agrupamento

A estrutura básica de um agrupamento em LINQ utiliza o método “GroupBy”, que agrupa os elementos de uma coleção com base em uma chave fornecida por uma função de projeção. Sua sintaxe é a seguinte:

				
					var resultado = colecao.GroupBy(elemento => elemento.Chave);
				
			

Aqui, “colecao” é a coleção de dados original, e na expressão lambda “elemento => elemento.Chave”, estamos dizendo que a chave para o agrupamento é a propriedade “Chave” de cada elemento. Em outras palavras, para cada elemento na coleção, o “GroupBy” usa o valor da propriedade “Chave” para determinar em qual grupo o elemento deve ser colocado.

Agrupando produtos por categoria

Para entender como funciona o agrupamento em LINQ, vamos trabalhar com um exemplo simples que usa uma lista de produtos. Primeiro, precisamos definir a nossa entidade de produto. Em C#, isso é feito criando uma classe que representa o que queremos armazenar. No nosso caso, vamos criar uma classe chamada “Produto” que tem três propriedades “Nome”, “Categoria”, “Preco”.

				
					public class Produto
{
    public string Nome { get; set; }
    public string Categoria { get; set; }
    public decimal Preco { get; set; }
}

				
			

Em seguida, criamos uma lista de objetos “Produto”, cada um com valores específicos para essas propriedades, como diferentes categorias e preços.

				
					 List<Produto> produtos = new List<Produto>
{
    new Produto { Nome = "Televisão", Categoria = "Eletrônicos", Preco = 1900 },
    new Produto { Nome = "Sofá", Categoria = "Móveis", Preco = 1200 },
    new Produto { Nome = "Mesa de Jantar", Categoria = "Móveis", Preco = 900 },
    new Produto { Nome = "Notebook", Categoria = "Eletrônicos", Preco = 2500 },
    new Produto { Nome = "Mangueira", Categoria = "Jardinagem", Preco = 35}
};

				
			

Agora, queremos agrupar esses produtos pela categoria. Para fazer isso, usamos o método “GroupBy” para organizar os produtos em grupos onde cada grupo tem uma chave específica. Nesse caso, a chave será a “Categoria” do produto.

				
					var agrupamentoPorCategoria = produtos.GroupBy(p => p.Categoria);
				
			

O resultado é uma coleção de grupos, em cada grupo contém produtos que pertencem à mesma categoria. Ou seja, será criado um grupo com a chave “Eletrônicos” que vai conter “Televisão” e “Notebook”, um grupo com a chave “Móveis” com “Mesa de Jantar” e “Sofá” e um terceiro grupo com a chave “Jardinagem” que vai conter o item “Mangueira”.

Para exibir os produtos agrupados por categoria, iteramos sobre cada grupo. Dentro de cada grupo, usamos a propriedade “Key” para obter a categoria e acessamos todos os produtos dessa categoria.

				
					foreach (var grupo in agrupamentoPorCategoria)
{
    Console.WriteLine($"Categoria: {grupo.Key}");
    foreach (var produto in grupo)
    {
        Console.WriteLine($"- {produto.Nome}: {produto.Preco:C}");
    }
}
				
			

Durante essa iteração, a propriedade “Key” de cada grupo nos dá a categoria do grupo, e a coleção contém todos os produtos que pertencem a essa categoria. Por fim, exibimos cada grupo de produtos, mostrando o nome e o preço de cada item dentro da categoria correspondente.

O resultado exibido seria algo assim:


Isso mostra claramente como os produtos foram agrupados por categoria e apresenta cada produto dentro de sua categoria correspondente. A partir daí, você pode realizar diferentes operações sobre os grupos, como aplicar funções de agregação para obter totalizadores sobre cada conjunto de dados.

Acelere a sua carreira conosco!

Se você é Desenvolvedor .NET Júnior e quer acelerar sua carreira até nível Pleno com salário de R$7k+, ou mesmo busca a primeira vaga, conheça a Mentoria .NET StartClique aqui

Se é Desenvolvedor .NET Pleno ou Sênior e quer virar referência técnica em sua equipe e mercado, com salário de R$10k+, conheça a Mentoria .NET ExpertClique aqui

Conclusão

O agrupamento em LINQ é uma ferramenta poderosa para organizar e sumarizar dados. Usando o método “GroupBy”, você pode agrupar elementos com base em uma chave específica e aplicar operações de agregação para obter insights adicionais. No C#, o LINQ torna essas operações intuitivas e fáceis de ler, permitindo consultas mais declarativas e expressivas.