Compiler-Fehler: „Lambda-Ausdruck mit Anweisungskörper kann nicht in Ausdrucksbaum konvertiert werden“
Beim Arbeiten mit EntityFramework kann ein Fehler auftreten mit der Aussage: „Ein Lambda-Ausdruck mit einem Anweisungshauptteil kann nicht in einen Ausdrucksbaum konvertiert werden.“ Dieser Fehler tritt auf, wenn Sie versuchen, einen Lambda-Ausdruck mit einer Blockanweisung (auch als Anweisungs-Lambda bezeichnet) in einem Kontext zu verwenden, in dem nur Ausdrucks-Lambdas zulässig sind.
Das Problem
Wie die Fehlermeldung vermuten lässt, erwartet EntityFramework Ausdrucks-Lambdas, bei denen es sich um prägnante Ausdrücke ohne Blockanweisungen handelt. Im bereitgestellten Beispiel enthält der Lambda-Ausdruck:
Obj[] myArray = objects.Select(o => { var someLocalVar = o.someVar; return new Obj() { Var1 = someLocalVar, Var2 = o.var2 }; });
eine Blockanweisung, was ihn zu einem Anweisungs-Lambda macht. EntityFramework kann diesen Ausdruck nicht in eine Form konvertieren, die zum Ausführen von Datenbankabfragen geeignet ist.
Die Lösung
Um den Fehler zu beheben, überarbeiten Sie Ihren Lambda-Ausdruck, um einen Ausdrucks-Lambda zu verwenden. Ausdruckslambdas sind einzeilige Ausdrücke, die ohne Verwendung zusätzlicher Anweisungen direkt einen Wert zurückgeben. In diesem Fall können Sie das Lambda wie folgt umschreiben:
Obj[] myArray = objects.Select(o => new Obj() { Var1 = o.someVar, Var2 = o.var2 });
Dieser Lambda-Ausdruck eliminiert die Blockanweisung und gibt direkt ein neues Obj-Objekt zurück. Dieses Formular ist mit den Erwartungen von EntityFramework an Ausdrucksbäume kompatibel und behebt den Kompilierungsfehler.
Das obige ist der detaillierte Inhalt vonWarum wirft Entity Framework die Meldung „Lambda-Ausdruck mit Anweisungstext kann nicht in Ausdrucksbaum konvertiert werden' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!