Erreur du compilateur : "L'expression Lambda avec le corps de l'instruction ne peut pas être convertie en arbre d'expression"
Lorsque vous travaillez avec EntityFramework, vous pouvez rencontrer une erreur déclarant : "Une expression lambda avec un corps d'instruction ne peut pas être convertie en une arborescence d'expression." Cette erreur se produit lorsque vous tentez d'utiliser une expression lambda avec une instruction de bloc (également appelée instruction lambda) dans un contexte où seules les expressions lambda sont autorisées.
Le problème
Comme le suggère le message d'erreur, EntityFramework attend des expressions lambda, qui sont des expressions concises sans aucune instruction de bloc. Dans l'exemple fourni, l'expression lambda :
Obj[] myArray = objects.Select(o => { var someLocalVar = o.someVar; return new Obj() { Var1 = someLocalVar, Var2 = o.var2 }; });
contient une instruction block, ce qui en fait une instruction lambda. EntityFramework ne peut pas convertir cette expression en un formulaire adapté à l'exécution de requêtes de base de données.
La solution
Pour résoudre l'erreur, refactorisez votre expression lambda pour utiliser une expression lambda. Les expressions lambda sont des expressions sur une ligne qui renvoient directement une valeur sans utiliser d'instructions supplémentaires. Dans ce cas, vous pouvez réécrire le lambda comme suit :
Obj[] myArray = objects.Select(o => new Obj() { Var1 = o.someVar, Var2 = o.var2 });
Cette expression lambda élimine l'instruction block et renvoie directement un nouvel objet Obj. Ce formulaire est compatible avec les attentes d'EntityFramework concernant les arbres d'expression et résoudra l'erreur de compilation.
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!