0
Promoção de Volta das Aulas ! Cursos com 25% OFF no menu "Cursos"
julho 24, 2025
0
César Fontanella

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#