Neste artigo, vamos aprender como usar o recurso de consultas LINQ para filtrar dados de uma coleção. LINQ é uma abreviação de Language Integrated Query, que significa Consulta Integrada à Linguagem. É um conjunto de recursos que permite escrever consultas de forma declarativa, usando a sintaxe do C# ou do Visual Basic.
Uma consulta LINQ é composta por três partes principais: a fonte de dados, os critérios de filtragem e a projeção dos resultados. A fonte de dados pode ser qualquer tipo que implemente a interface IEnumerable, como um array, uma lista, um dicionário ou um conjunto. Os critérios de filtragem são expressões lambda que especificam as condições que os elementos da fonte de dados devem satisfazer para serem selecionados. A projeção dos resultados é a forma como os elementos selecionados são transformados ou agrupados.
Para exemplificar, vamos usar uma classe chamada Produto, que representa um produto de uma loja online. A classe tem as seguintes propriedades:
- Id: um número inteiro que identifica o produto.
- Nome: uma string que contém o nome do produto.
- Preco: um número decimal que representa o preço do produto.
- Categoria: uma string que indica a categoria do produto.
Vamos supor que temos uma lista de produtos chamada produtos, que contém alguns objetos da classe Produto. Veja como seria uma consulta LINQ para selecionar os produtos da categoria “Livros” que custam menos de 50 reais:
var livrosBaratos = from p in produtos
where p.Categoria == "Livros" && p.Preco < 50
select p;
A consulta acima usa a sintaxe de consulta, que é similar à sintaxe SQL. A palavra-chave from indica a fonte de dados, que no caso é a lista produtos. A palavra-chave where indica os critérios de filtragem, que no caso são duas condições lógicas combinadas com o operador &&. A palavra-chave select indica a projeção dos resultados, que no caso é o próprio elemento p.
A consulta LINQ retorna um objeto do tipo IEnumerable<Produto>, que pode ser iterado com um laço foreach ou convertido para outro tipo de coleção, como um array ou uma lista. Veja como seria o código para imprimir os nomes e os preços dos livros baratos:
foreach (var livro in livrosBaratos)
{
Console.WriteLine($"{livro.Nome} - {livro.Preco:C}");
}
A consulta LINQ também pode ser escrita usando a sintaxe de método, que é baseada em métodos de extensão da classe Enumerable. Esses métodos recebem como parâmetro uma expressão lambda que representa o critério de filtragem ou a projeção dos resultados. Veja como seria a mesma consulta usando a sintaxe de método:
var livrosBaratos = produtos.Where(p => p.Categoria == "Livros" && p.Preco < 50)
.Select(p => p);
O método Where recebe uma expressão lambda que representa o critério de filtragem, e retorna um objeto do tipo IEnumerable<Produto> com os elementos selecionados. O método Select recebe uma expressão lambda que representa a projeção dos resultados, e retorna um objeto do tipo IEnumerable<Produto> com os elementos transformados.
A vantagem da sintaxe de método é que ela permite encadear vários métodos para criar consultas mais complexas. Por exemplo, podemos ordenar os livros baratos por preço usando o método OrderBy:
var livrosBaratos = produtos.Where(p => p.Categoria == "Livros" && p.Preco < 50)
.OrderBy(p => p.Preco)
.Select(p => p);
O método OrderBy recebe uma expressão lambda que representa o critério de ordenação, e retorna um objeto do tipo IOrderedEnumerable<Produto>, que é uma subclasse de IEnumerable<Produto>. Podemos usar outros métodos como ThenBy, OrderByDescending e ThenByDescending para ordenar os elementos por mais de um critério ou em ordem decrescente.
Existem muitos outros métodos que podem ser usados para criar consultas LINQ, como First, Last, Single, Count, Sum, Average, Min, Max, GroupBy, Join e Distinct. Cada método tem uma função específica e pode receber parâmetros diferentes. Para saber mais sobre esses métodos e suas aplicações, consulte a documentação oficial do .NET.
Conclusão
Neste artigo, vimos como usar o recurso de consultas LINQ para filtrar dados de uma coleção. Aprendemos a usar as duas sintaxes possíveis: a sintaxe de consulta e a sintaxe de método. Vimos também alguns exemplos de métodos que podem ser usados para criar consultas mais complexas. Esperamos que este artigo tenha sido útil e que você possa aplicar o conhecimento adquirido em seus projetos.
0 comentários