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 produtos = new List
{
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 Start: Clique 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 Expert: Clique 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.