Três métodos LINQ essenciais para o desenvolvedor .NET

À medida que aplicações se tornam mais complexas, a necessidade de manipular dados de forma eficiente em bancos de dados e listas de objetos se torna crucial. Tradicionalmente, isso envolvia o uso de consultas específicas ou lógica manual extensa. O LINQ surgiu como uma solução integrada no C# para simplificar e unificar essas operações, oferecendo uma sintaxe declarativa que melhora a produtividade e a legibilidade do código.

Neste artigo conheceremos três dos principais métodos que compõem o LINQ e que são indispensáveis para todo desenvolvedor .NET.

O que é LINQ?

LINQ é um acrônimo para Language Integrated Query, ou Consulta Integrada à Linguagem. É uma tecnologia que integra consultas de dados diretamente na linguagem C#. Ele unifica a forma de consultar dados de diferentes fontes, proporcionando uma maneira mais intuitiva e declarativa de manipular coleções de objetos, bancos de dados e outros formatos

Para tornar as consultas mais expressivas e concisas, LINQ utiliza expressões lambda. Estas são funções anônimas que podem ser usadas para definir operações diretamente nas consultas LINQ, facilitando a filtragem, ordenação e transformação de dados.

O que são Expressões Lambda?

Expressões lambda são uma forma de definir funções anônimas em C#. Elas são usadas no LINQ Method Syntax para especificar as operações a serem realizadas sobre os dados. Uma expressão lambda usa a sintaxe “=>”, onde a parte à esquerda do operador define os parâmetros de entrada e a parte à direita define a expressão ou bloco de código a ser executado.

Combinando LINQ e expressões lambda, os desenvolvedores podem escrever consultas de maneira fluida e natural, aproveitando a sintaxe familiar do C# para realizar operações complexas de forma simples e legível.

Estrutura de uma consulta LINQ com Expressões Lambda

A estrutura básica de uma consulta LINQ com expressões lambda é:

var resultado = fonteDeDados.Metodo(parâmetro => expressão)

Vamos decompor isso em partes:

  • resultado: variável onde o resultado da consulta será armazenado.
  • fonteDeDados: a coleção ou fonte de dados sobre a qual a consulta será realizada. Pode ser uma lista, um array, um conjunto de dados de um banco de dados, etc.
  • Metodo: o método LINQ que define a operação a ser realizada na fonte de dados (por exemplo, Where, OrderBy, Select).
  • parâmetro => expressão: A expressão lambda que define a condição ou a transformação aplicada a cada elemento da fonte de dados.

Estrutura de dados

Para ilustrar como podemos manipular certas estruturas de dados em com LINQ, vamos considerar uma classe “Produto”, cuja estrutura é definida da seguinte forma:

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

				
			

E para os exemplos práticos utilizaremos uma lista desses produtos, sobre a qual faremos algumas operações:

				
					List<Produto> produtos = new List<Produto>
{
	new Produto { Id = 1, Nome = "Notebook", Preco = 1200 },
	new Produto { Id = 2, Nome = "Tablet", Preco = 400 },
	new Produto { Id = 3, Nome = "Smartphone", Preco = 800 },
	new Produto { Id = 4, Nome = "Monitor", Preco = 300 },
	new Produto { Id = 5, Nome = "Teclado", Preco = 50 }
};

				
			

Filtragem sem LINQ

Sem utilizar LINQ, uma filtragem de produtos cujo preço seja maior que R$ 500 pode ser feita da seguinte maneira:

				
					List<Produto> ProdutosFiltrados = new List<Produto>();
foreach (var item in produtos)
{
	if (item.Preco > 500)
	{
       		 ProdutosFiltrados.Add(item);
	}
}

				
			

Criamos uma lista chamada “ProdutosFiltrados”  que vai receber os produtos que respeitam a regra estabelecida. Utilizamos um laço de repetição “foreach” para percorrer cada item da lista de produtos e verificar se o preço do item atual é maior que R$500. Caso o item cumpra essa regra, ele é adicionado à lista “produtosFiltrados”.

Se observarmos podemos perceber que usamos cerca de oito linhas para poder realizar essa ação. Vamos ver como podemos fazer com o LINQ.

Filtragem com LINQ usando o WHERE

A utilização do LINQ simplifica significativamente o código, reduzindo-o a uma única linha, tornando-o mais legível e fácil de manter:

				
					var produtosFiltrados = produtos.Where(p => p.Preco > 500);
				
			

Neste exemplo,  o “Where” é um método que permite aplicar uma condição de filtro sobre a coleção. A expressão “p => p.Preco > 500” é uma expressão lambda que define que se o valor de cada produto “p” na coleção “produtos” for maior que R$500 o item será adicionado na lista de “produtosFiltrados”.

Se imprimirmos o resultado no console, teremos o seguinte:


Ordenação com LINQ usando o OrderBy e OrderByDescending

Para ordenar os produtos pelo preço de forma crescente, utilizamos o método “OrderBy”. Este método de extensão permite que especifiquemos uma chave de ordenação através de uma expressão lambda. Aqui está um exemplo de como ordenar a lista de produtos pelo preço em ordem crescente:

				
					var produtosOrdenados = produtos.OrderBy(p => p.Preco);
				
			

Agora, ao imprimir os objetos da lista temos o seguinte resultado:

Já para ordenar os produtos pelo preço de forma decrescente, utilizamos o método “OrderByDescending”. Assim como “OrderBy”, este método permite especificar a chave de ordenação, mas a ordenação é feita em ordem decrescente:

				
					var produtosOrdenadosDesc = produtos.OrderByDescending(p => p.Preco);
				
			

O resultado agora é este:


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

Seleção com LINQ usando o SELECT

Outra funcionalidade poderosa do LINQ é a capacidade de projetar ou selecionar dados específicos de uma coleção. Por exemplo, para selecionar apenas os nomes dos produtos, podemos usar o método Select:

				
					var nomesProdutos = produtos.Select(p => p.Nome);
				
			

Portanto, “nomesProdutos” será uma coleção (no caso, uma IEnumerable<string>) que contém apenas os nomes dos produtos da lista original “produtos”.

 

Ao imprimir os itens da coleção nomesProdutos, temos o seguinte resultado no console:


Conclusão

O LINQ simplifica significativamente a manipulação e consulta de dados em coleções. Ele permite que você escreva código mais limpo e expressivo, melhorando a legibilidade e a manutenção do código. Através de métodos como Where, OrderBy, OrderByDescending e Select entre outros, o LINQ proporciona uma maneira eficiente de realizar operações comuns de consulta de dados, substituindo abordagens tradicionais mais verbosas. Se você ainda não está utilizando LINQ em suas aplicações C#, vale a pena explorá-lo e aproveitar suas vantagens.