Une expression lambda est une manière d'écrire une fonction anonyme, c'est à dire une fonction sans nom. Ce que vous avez sur le côté gauche de la "flèche" sont des paramètres de la fonction, et ce que vous avez sur le côté droit sont le corps de la fonction. Ainsi, (x => x.Name)
logiquement se traduit par quelque chose comme string Function(Data x) { return x.Name }
types string
et Data
va évidemment varier et être dérivée à partir du contexte.
L'absence de la gauche du paramètre se traduit par une fonction sans paramètres, de sorte que ce (() => someVariable)
logiquement se traduit par ceci: string Function() { return someVariable; }
À ce stade, vous pourriez commencer à se demander, où someVariable
vient, ce n'est pas un paramètre de la fonction et il n'est pas défini dans la fonction. Vous auriez raison, une fonction comme ce ne serait jamais le compiler. Cependant, la fonction lambda comme ce qui est parfaitement correct, car il permet à l'extérieure de la portée des variables est levé et utilisé de cette façon. (À l'intérieur d'une classe wrapper est créé dans le cas où les variables qui sont utilisées dans l'expression lambda devenir des champs.)
Maintenant, nous allons voir ce qu' model => item.FirstName
moyens. Logiquement, il serait traduit en string Function(Model model) { return item.FirstName; }
. Fondamentalement, c'est une fonction avec un paramètre, mais ce paramètre n'est pas utilisé.
Et maintenant, le dernier morceau de l'information. Bien que les expressions lambda représenter les fonctions à la fin, parfois, ils sont créés non pas dans le but d'être réellement exécutées (bien que potentiellement ils le peuvent). Une expression lambda peut être représenté sous la forme d'une arborescence d'expression. Cela signifie qu'au lieu de l'exécuter, il peut être analysée.
Dans ce cas particulier MVC moteur de ne pas exécuter la fonction que le lamba expression représente. Au lieu de cela, l'expression est analysée afin que MVC moteur sait ce que le html à émettre pour cette ligne en particulier. Si votre élément de données ne proviennent pas de votre modèle d'objet directement, la partie gauche de l'expression lambda n'a pas d'importance.