por Cesar Cassiano Schimanco

LINQ - Sintaxe de consulta, sintaxe do método e Lambda

Quando se fala em LINQ é melhor usar Sintaxe de consulta (Query Syntax) ou Sintaxe do método (Method Syntax)?

Antes de mais nada, é interessante saber que a Query Syntax é traduzida para Method Syntax quando compilada e o resultado gerado por ambas é o mesmo.
Dê fato a Query Syntax é melhor de ler e interpretar, principalmente quando a consulta é mais complexa, mas considere usar o Method Syntax já que a Query será convertida em Method.

Abaixo vamos ver definições e exemplos.

Sintaxe de consulta (Query Syntax)
A consulta é criada usando operadores padrão de consulta LINQ

var query = from c in clientes
            where c.ID == 1
            orderby c.Nome
            select c;


Sintaxe do método (Method Syntax):
O Method Syntax usa expressões lambda nos métodos Where, Select, GroupBy, Join, Max...

var query = clientes
    .Where(c => c.ID == 1)
    .OrderBy(c => c.Nome);


Lambda
Expressão lambda neste caso é apenas uma forma de construir expressão..

p => p + 1


Expressões lambda são muito úteis para escrever expressões LINQ, como já vimos, usamos Lambda nos métodos Where, Select, GroupBy... do Method Sintax, mas isso não quer dizer que LINQ e Lambda sejam a mesma coisa, inclusive ambos podem ser usados separadamente.


Um detalhe interessante, a interface IEnumerable não possui métodos Select, Where, Orderby... mas eles aparecem no IntelliSense.
Pois é, se o IEnumerable não possui métodos Select, Where, Orderby... como eles aparecem no IntelliSense?
Bom, isso acontece porque o IEnumerable é estendido quando você adiciona o seguinte linha de código no topo da página:
using System.Linq;
Geralmente esta linha já está lá e por isso não percebemos que o IEnumerable é estendido e ganha os extension methods.
Ou então percebemos isso quando tentamos usar os extension methods e eles não aparecem no IntelliSense, então já sabe, inclua o Linq, caso contrário veremos o clássico erro: 'Select' not found
 

Comentários

Carregando comentários

Postar um novo comentário



Processando...