Query syntax vs method syntax
ResumoLINQ consulta coleções de forma declarativa. Há duas sintaxes equivalentes: a query syntax (parecida com SQL) e a method syntax (encadeamento de métodos). Ambas compilam para o mesmo código.
1. Objetivos de Aprendizagem#
- Escrever consultas nas duas sintaxes.
- Reconhecer que são equivalentes.
- Escolher a mais legível para cada caso.
2. Pré-requisitos#
- Interfaces de coleção (tópico 7.3).
3. Conceito#
LINQ (Language Integrated Query) traz consultas para dentro do C#. As duas sintaxes:
- Query syntax:
from x in fonte where ... select ...— legível para joins e agrupamentos. - Method syntax:
fonte.Where(...).Select(...)— usa métodos de extensão e expressões lambda; cobre 100% dos operadores.
O porquê de existirem duas: conveniência. O compilador traduz query syntax em method syntax. A method syntax é a mais comum no dia a dia.
4. Mão na Massa#
4.1. Setup#
dotnet new console -n Catalog.Linq
cd Catalog.Linq
4.2. Implementação Passo a Passo#
- Dados de exemplo:
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"),
};
- Query syntax:
var baratos = from p in produtos
where p.Preco < 200
orderby p.Preco
select p.Nome;
- Method syntax (equivalente):
var baratos2 = produtos
.Where(p => p.Preco < 200)
.OrderBy(p => p.Preco)
.Select(p => p.Nome);
foreach (var nome in baratos2)
Console.WriteLine(nome); // Mouse, Teclado
4.3. Executando#
dotnet run
5. Exemplo Completo#
As duas consultas acima produzem exatamente o mesmo resultado (Mouse, Teclado). Escolha a sintaxe que ficar mais clara para quem for ler.
6. Boas Práticas e Armadilhas#
| Faça | Evite |
|---|---|
| Usar method syntax para pipelines simples | Misturar as duas sintaxes na mesma consulta sem motivo |
| Query syntax para joins/agrupamentos complexos | Consultas gigantes e ilegíveis — quebre em etapas |
NotaLINQ funciona sobre
IEnumerable<T>(memória) e sobreIQueryable<T>(provedores como o EF Core, que traduzem a consulta para SQL). A sintaxe é a mesma; o destino muda.
7. Segurança e Produção#
- Com EF Core, a consulta LINQ vira SQL. Escrever consultas claras evita gerar SQL ineficiente sem perceber (veremos em execução adiada).
8. Exercícios#
- Fácil: liste os nomes dos produtos da categoria "Periféricos".
- Médio: escreva a mesma consulta nas duas sintaxes.
- Desafio: ordene por preço decrescente e pegue os 2 primeiros nomes.
9. Resumo#
LINQ consulta coleções de forma declarativa; query syntax e method syntax são equivalentes. Method syntax domina o dia a dia; query syntax brilha em consultas complexas.
10. Próximos Passos#
A seguir, os operadores LINQ essenciais.
11. Referências#
- Microsoft Learn — Introdução ao LINQ
- Microsoft Learn — Query syntax e method syntax
- Microsoft Learn — Visão geral de operadores de consulta padrão