
LINQ em C#: Como Fazer Consultas em Coleções de Forma Simples e Poderosa
Você já precisou percorrer listas, filtrar dados, ordenar elementos ou calcular médias em arrays e listas no C#? Se sim, sabe como isso pode gerar um código extenso e repetitivo. Felizmente, existe uma solução prática, elegante e extremamente poderosa: o LINQ (Language Integrated Query).
Neste guia, você vai aprender como usar LINQ para consultar dados em listas, arrays, dicionários e até bancos de dados — tudo isso com menos código e mais clareza. Ideal para quem está começando no C# e quer turbinar sua produtividade.
O que é LINQ?
LINQ (Language Integrated Query) é uma funcionalidade do C# que permite escrever consultas parecidas com SQL diretamente no código, para trabalhar com coleções de dados como arrays, listas, objetos e fontes externas (XML, SQL, JSON).
Com LINQ, você pode:
- Filtrar dados (where)
- Ordenar (orderby)
- Selecionar campos específicos (select)
- Agrupar informações (group by)
- Realizar agregações (count, sum, average, etc.)
Tudo isso de forma intuitiva e muito legível.
Por que usar LINQ?
- ✅ Deixa o código mais limpo e fácil de manter
- ✅ Reduz a quantidade de foreach, if e List<T> auxiliares
- ✅ Permite reaproveitar lógica de filtragem e ordenação
- ✅ É ideal para manipular listas de objetos complexos
Sintaxe Básica do LINQ
Existem duas formas principais de escrever consultas LINQ:
1. Sintaxe de Consulta (Query Syntax) — parecida com SQL
var resultado = from numero in numeros
where numero > 10
orderby numero
select numero;
2. Sintaxe de Método (Method Syntax) — estilo funcional
var resultado = numeros
.Where(n => n > 10)
.OrderBy(n => n);
Ambas produzem o mesmo resultado. Você pode escolher a que achar mais legível.
Exemplo Prático: Filtrando Números em uma Lista
List<int> numeros = new List<int> { 5, 10, 15, 20, 25 };
var maioresQueDez = numeros.Where(n => n > 10);
foreach (var n in maioresQueDez){
Console.WriteLine(n);
}
Saída:
15
20
25
Usando LINQ com Objetos
Imagine uma lista de produtos:
class Produto{
public string Nome { get; set; }
public double Preco { get; set; }
}
List<Produto> produtos = new List<Produto>{
new Produto { Nome = "Mouse", Preco = 80 },
new Produto { Nome = "Teclado", Preco = 120 },
new Produto { Nome = "Monitor", Preco = 850 },
};
Filtrar produtos com preço menor que 200:
var baratos = produtos
.Where(p => p.Preco < 200)
.Select(p => p.Nome);
foreach (var nome in baratos){
Console.WriteLine(nome);
}
Saída:
Mouse
Teclado
Funções Comuns em LINQ
- .Where() → filtra dados
- .Select() → projeta/transforma dados
- .OrderBy() / .OrderByDescending() → ordena
- .First() / .FirstOrDefault() → retorna o primeiro elemento
- .Count() → conta quantos elementos há
- .Sum() / .Average() / .Max() → operações matemáticas
Exemplo com agregações:
double media = produtos.Average(p => p.Preco);
double total = produtos.Sum(p => p.Preco);
Agrupamento com LINQ
var grupos = produtos.GroupBy(p => p.Preco < 500 ? "Barato" : "Caro");
foreach (var grupo in grupos){
Console.WriteLine($"Categoria: {grupo.Key}");
foreach (var p in grupo){
Console.WriteLine($"- {p.Nome}");
}
}
Essa consulta separa os produtos em categorias “Barato” e “Caro” com base no preço.
Dicas e Boas Práticas com LINQ
- Use expressões lambda para simplificar filtros;
- Prefira FirstOrDefault() para evitar exceções se o resultado estiver vazio;
- Combine .Where(), .Select() e .OrderBy() com clareza, evitando encadeamentos muito longos;
- Use var com parcimônia: declare o tipo explícito se a legibilidade for comprometida.
Quando não usar LINQ?
Embora LINQ seja poderoso, evite em casos como:
- Código que exige máxima performance (LINQ pode ser mais lento que um for puro em grandes volumes);
- Situações onde o encadeamento de chamadas compromete a legibilidade;
- Operações com efeitos colaterais (como alterar dados dentro do .Where() ou .Select()).
Conclusão: LINQ é um Superpoder no C# para Manipular Dados
Com LINQ, você transforma listas e coleções em consultas fáceis de entender e extremamente poderosas. Seja para filtrar, agrupar ou ordenar dados, ele oferece uma sintaxe clara, robusta e intuitiva.
Se você ainda usa foreach e if para tudo, experimente o LINQ. Seu código vai agradecer — e seus colegas também.
Conteúdo adaptado do capítulo 15 do livro Use a Cabeça! C#