97 votes

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 utilisant la "Méthode Syntaxe" dont le prédicat est une Lambda. Pour être clair, les deux exemples ci-dessus exemples ci-dessus sont Linq (mon message original était incorrect, mais j'ai laissé l'erreur pour illustrer la confusion à l'origine de la question).

Mais Linq est 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 plutôt que l'autre ?

128voto

Jon Points 194296

Il s'agit de LINQ (utilisation de la syntaxe des requêtes) :

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

Il s'agit également de LINQ (qui utilise la syntaxe des méthodes) :

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

Il est intéressant de noter que ces deux saveurs finira 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.

Y ce est un lambda :

x => x.Value == 1

Lorsque vous choisissez d'utiliser la syntaxe des méthodes, LINQ est presque toujours vu autour des expressions lambda. Mais LINQ y lambdas sont deux choses totalement différentes, qui peuvent toutes deux être utilisées seules.

Mise à jour : Comme le souligne à juste titre svick, LINQ avec la syntaxe de requête est également implémentées à l'aide d'expressions lambda (comme mentionné précédemment, le compilateur vous permet d'écrire en syntaxe de requête mais la transforme effectivement en syntaxe de méthode derrière votre dos). Cela ne fait qu'ajouter au fait que les deux saveurs sont totalement équivalentes et se comporteront de la même manière (par exemple, les expressions lambda peuvent causer fermetures à créer).

34voto

Chris Points 15358

Les deux sont des Linq. Le second est en utilisant Lambdas .

Les lambdas sont les éléments de type méthode en ligne que vous passez comme 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 il fonctionne sous le capot. Le premier style est censé être plus convivial et plus simple et le compilateur le convertit en appels de méthode en coulisse. Ils devraient fonctionner de la même manière pour toute 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 celle que vous feriez en convertissant en style méthode.

Cet article de msdn peut également être intéressant : Syntaxe de requête LINQ versus syntaxe de méthode . La phrase suivante est particulièrement pertinente : "En général, nous recommandons la syntaxe de requête parce qu'elle est habituellement 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."

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X