Est-ce Linq ou Lambda?

Je sais que c’est Linq:

var _Results = from item in _List where item.Value == 1 select item; 

Et je sais que c’est Lambda:

 var _Results = _List.Where(x => x.Value == 1); 

Note de l’éditeur: ce qui précède n’est pas simplement Lambda, c’est Linq qui utilise la “Syntaxe de la méthode” dont le prédicat est un Lambda. Pour être clair, les deux exemples ci-dessus sont Linq (mon message original était incorrect, mais j’ai laissé l’erreur pour illustrer la confusion qui a provoqué la question).

Mais Linq est-il un sous-ensemble de Lambda ou quoi?

Pourquoi y a-t-il deux techniciens apparemment identiques?

Y a-t-il une raison technique de choisir l’un sur l’autre?

Ceci est LINQ (en utilisant la syntaxe de requête):

 var _Results = from item in _List where item.Value == 1 select item; 

Ceci est aussi LINQ (en utilisant la syntaxe de la méthode):

 var _Results = _List.Where(x => x.Value == 1); 

Il est intéressant de noter que ces deux parfums finiront par produire exactement le même code. Le compilateur vous offre un service en vous permettant d’exprimer vos souhaits de la manière que vous préférez.

Et ceci est un lambda:

 x => x.Value == 1 

Lorsque vous choisissez d’utiliser la syntaxe de méthode, LINQ est presque toujours visible autour des expressions lambda. Mais LINQ et lambdas sont deux choses totalement différentes, les deux pouvant être utilisées seules.

Mise à jour: Comme svick le souligne à juste titre, LINQ avec la syntaxe de requête est également implémentée en utilisant des expressions lambda (comme mentionné précédemment, le compilateur vous permet d’écrire une syntaxe de requête mais la transforme en arrière). Cela ne fait qu’emstackr sur le fait que les deux versions sont totalement équivalentes et se comporteront de la même manière (par exemple, les expressions lambda peuvent entraîner la création de fermetures ).

Les deux sont Linq. Le second utilise Lambdas .

Les Lambdas sont les éléments du type de méthode en ligne que vous transmettez en tant que paramètre à la fonction Where du deuxième exemple.

La différence entre ces deux syntaxes est purement syntaxique. Le deuxième style de linq utilisant des appels de méthode est la façon dont cela fonctionne sous le capot. Le premier est destiné à être plus convivial / plus facile et le compilateur le convertit en appels de méthode en arrière-plan. Ils devraient fonctionner de la même manière pour chaque requête bien que le compilateur choisisse évidemment une interprétation légèrement différente d’une requête linq compliquée que lors d’une conversion en style méthode.

Cet article peut également vous intéresser: LINQ Query Syntax versus Syntaxe de la méthode . Ce qui est particulièrement pertinent est: “En général, nous recommandons la syntaxe de requête car elle est généralement plus simple et plus lisible; toutefois, il n’ya pas de différence sémantique entre la syntaxe de la méthode et la syntaxe de la requête.”