Heim >Backend-Entwicklung >C++ >Warum verursacht mein Lambda-Ausdruck mit einem Anweisungstext einen Fehler im Entity Framework?
Lambda-Ausdruck mit Anweisungskörperfehler in EntityFramework
In EntityFramework tritt beim Arbeiten mit Lambda-Ausdrücken häufig ein Fehler auf:
"Ein Lambda-Ausdruck mit einem Anweisungskörper kann nicht in einen Ausdruck umgewandelt werden Baum.“
Dieser Fehler tritt auf, wenn ein Lambda-Ausdruck Anweisungen anstelle eines Ausdrucks enthält. In EntityFramework werden Lambda-Ausdrücke verwendet, um Bedingungen oder Transformationen innerhalb von Abfragen anzugeben. Ausdrücke dürfen jedoch keine Anweisungen enthalten, die Variablen ändern oder Aktionen ausführen.
Beispiel:
Der folgende Codeausschnitt löst den Fehler aus:
Obj[] myArray = objects.Select(o => { var someLocalVar = o.someVar; return new Obj() { Var1 = someLocalVar, Var2 = o.var2 }; }).ToArray();
Erklärung:
In diesem Beispiel verwendet der Lambda-Ausdruck einen Anweisungskörper zum Zuweisen Geben Sie einen Wert an die lokale Variable someLocalVar an, bevor Sie ein Objekt zurückgeben. Dieser Anweisungskörper kann jedoch nicht in einen Ausdrucksbaum zur Ausführung durch EntityFramework konvertiert werden.
Lösung:
Um diesen Fehler zu beheben, schreiben Sie den Lambda-Ausdruck so um, dass er nur enthält Ausdrücke. In diesem Fall bedeutet dies, den Anweisungskörper zu entfernen und das Obj-Objekt direkt zu erstellen:
Arr[] myArray = objects.Select(o => new Obj() { Var1 = o.someVar, Var2 = o.var2 }).ToArray();
Jetzt besteht der Lambda-Ausdruck nur noch aus einem Ausdruck und kann zur Verarbeitung durch EntityFramework in einen Ausdrucksbaum umgewandelt werden.
Das obige ist der detaillierte Inhalt vonWarum verursacht mein Lambda-Ausdruck mit einem Anweisungstext einen Fehler im Entity Framework?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!