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 utilisant la "Method Syntax" dont le prédicat est un Lambda. Pour être clair, les deux exemples ci-dessus sont Linq (mon message d'origine était incorrect, mais j'ai laissé l'erreur pour illustrer la confusion qui a suscité la question).
Mais Linq est-il un sous-ensemble de Lambda ou quoi?
Pourquoi y a-t-il deux technologies apparemment identiques?
Y a-t-il une raison technique de choisir l'un plutôt que l'autre?
Réponses:
Voici LINQ (en utilisant la syntaxe de requête):
C'est aussi LINQ (en utilisant la syntaxe de la méthode):
Il est intéressant de noter que ces deux versions finiront par produire exactement le même code. Le compilateur vous propose un service en vous permettant d'exprimer vos souhaits de la manière que vous préférez.
Et c'est un lambda:
Lorsque vous choisissez d'utiliser la syntaxe de méthode, LINQ est presque toujours vu autour des expressions lambda. Mais LINQ et lambdas sont deux choses totalement différentes, qui peuvent toutes deux être utilisées par elles-mêmes.
Mise à jour: comme svick le souligne à juste titre, LINQ avec la syntaxe de requête est également implémenté à l'aide d'expressions lambda (comme mentionné précédemment, le compilateur vous permet d'écrire dans la syntaxe de requête mais la transforme efficacement en syntaxe de méthode derrière votre dos). Cela ne fait qu'empiler le fait que les deux saveurs sont totalement équivalentes et se comporteront de la même manière (par exemple, les expressions lambda peuvent provoquer la création de fermetures ).
la source
Les deux sont Linq. Le second utilise des Lambdas .
Les lambdas sont les éléments de type de méthode en ligne que vous transmettez en tant que paramètre à la fonction Where dans le deuxième exemple.
La différence entre ces deux syntaxes est purement syntaxique. Le deuxième style linq utilisant des appels de méthode est la façon dont cela fonctionne sous le capot. Le premier est censé être plus convivial / plus facile et le compilateur le convertit en appels de méthode dans les coulisses. Ils devraient fonctionner de la même manière pour n'importe quelle requête donnée, bien que le compilateur puisse bien sûr choisir une interprétation légèrement différente d'une requête linq compliquée que vous le feriez lors de la conversion en style méthode.
Cet article msdn peut également être intéressant: Syntaxe de requête LINQ versus syntaxe de méthode . Il est particulièrement pertinent: "En général, nous recommandons la syntaxe de requête car elle est généralement plus simple et plus lisible; cependant, il n'y a pas de différence sémantique entre la syntaxe de méthode et la syntaxe de requête."
la source