Pular para o conteúdo
.NETOperadores essenciais
Módulo 01Fundamentos da Plataforma e da Linguagem

Operadores essenciais

intermediario 30 min de leitura·Atualizado · .NET 9
Resumo

Um punhado de operadores LINQ cobre a maioria das necessidades: filtrar (Where), projetar (Select), ordenar (OrderBy), agrupar (GroupBy) e agregar (Count, Sum, First). Dominá-los é essencial para trabalhar com dados.

1. Objetivos de Aprendizagem#

  • Usar filtragem, projeção, ordenação e agrupamento.
  • Aplicar operadores de agregação e de elemento.
  • Encadear operadores em pipelines claros.

2. Pré-requisitos#

  • Query vs method syntax (tópico 8.1).

3. Conceito#

Grupos de operadores:

  • Filtragem: Where.
  • Projeção: Select, SelectMany.
  • Ordenação: OrderBy, OrderByDescending, ThenBy.
  • Agrupamento: GroupBy.
  • Agregação: Count, Sum, Average, Min, Max.
  • Elemento: First, FirstOrDefault, Single, Any, All.

O porquê: expressar transformações de dados de forma declarativa, sem laços manuais e variáveis de controle.

4. Mão na Massa#

4.1. Setup#

Shell
dotnet new console -n Catalog.LinqOps
cd Catalog.LinqOps

4.2. Implementação Passo a Passo#

C#
record Produto(string Nome, decimal Preco, string Categoria);

var produtos = new List<Produto>
{
    new("Mouse", 90m, "Periféricos"),
    new("Teclado", 120m, "Periféricos"),
    new("Monitor", 1200m, "Telas"),
    new("Webcam", 250m, "Periféricos"),
};

// Filtragem + projeção
var nomesCaros = produtos.Where(p => p.Preco > 100).Select(p => p.Nome);

// Agregação
decimal total = produtos.Sum(p => p.Preco);
int quantidade = produtos.Count(p => p.Categoria == "Periféricos");

// Elemento
var maisCaro = produtos.OrderByDescending(p => p.Preco).First();
bool temTela = produtos.Any(p => p.Categoria == "Telas");

// Agrupamento
var porCategoria = produtos
    .GroupBy(p => p.Categoria)
    .Select(g => new { Categoria = g.Key, Total = g.Sum(p => p.Preco) });

foreach (var item in porCategoria)
    Console.WriteLine($"{item.Categoria}: {item.Total:C}");

4.3. Executando#

Shell
dotnet run

5. Exemplo Completo#

O agrupamento por categoria com soma de preços é um relatório completo em 3 linhas de LINQ — o tipo de operação que aparece o tempo todo em APIs (filtros, totais, dashboards).

6. Boas Práticas e Armadilhas#

FaçaEvite
Usar FirstOrDefault quando pode não haver resultadoFirst em coleção que pode estar vazia (lança exceção)
Usar Any() para checar existênciaCount() > 0 quando só quer saber se existe
Encadear operadores em pipeline legívelConsultas monstruosas numa linha só
Atenção

Single lança exceção se houver mais de um elemento. Use-o só quando garantir unicidade; caso contrário, First/FirstOrDefault.

7. Segurança e Produção#

  • Com EF Core, prefira Any() a Count() > 0 para checar existência — gera SQL mais eficiente (EXISTS).

8. Exercícios#

  • Fácil: conte quantos produtos custam mais de 100.
  • Médio: obtenha o produto mais barato de cada categoria.
  • Desafio: produza um resumo { Categoria, Média, Quantidade } por categoria.

9. Resumo#

Where, Select, OrderBy, GroupBy e as agregações (Sum, Count, First, Any) cobrem a maior parte das transformações. Prefira Any() e FirstOrDefault para código seguro.

10. Próximos Passos#

A seguir, o comportamento que mais confunde iniciantes: execução adiada.

11. Referências#

08-02 — Operadores essenciais | Curso ASP.NET Core