Maison >développement back-end >C++ >Pourquoi mon expression Lambda avec un corps d'instruction provoque-t-elle une erreur dans Entity Framework ?
Expression Lambda avec erreur de corps de déclaration dans EntityFramework
Dans EntityFramework, une erreur courante rencontrée lors de l'utilisation d'expressions lambda est :
"Une expression lambda avec un corps de déclaration ne peut pas être convertie en expression tree."
Cette erreur se produit lorsqu'une expression lambda contient des instructions au lieu d'une expression. Dans EntityFramework, les expressions lambda sont utilisées pour spécifier des conditions ou des transformations dans les requêtes. Cependant, les expressions ne peuvent pas contenir d'instructions qui modifient des variables ou effectuent des actions.
Exemple :
L'extrait de code suivant déclenche l'erreur :
Obj[] myArray = objects.Select(o => { var someLocalVar = o.someVar; return new Obj() { Var1 = someLocalVar, Var2 = o.var2 }; }).ToArray();
Explication :
Dans cet exemple, l'expression lambda utilise un corps d'instruction pour attribuer une valeur à la variable locale someLocalVar avant de renvoyer un objet. Cependant, ce corps d'instruction ne peut pas être converti en arbre d'expression pour exécution par EntityFramework.
Solution :
Pour résoudre cette erreur, réécrivez l'expression lambda afin qu'elle soit uniquement contient des expressions. Dans ce cas, cela signifie supprimer le corps de l'instruction et construire directement l'objet Obj :
Arr[] myArray = objects.Select(o => new Obj() { Var1 = o.someVar, Var2 = o.var2 }).ToArray();
Maintenant, l'expression lambda se compose uniquement d'une expression et peut être convertie en un arbre d'expression pour être traitée par EntityFramework.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!