使用EntityFramework 時出現錯誤:「帶有語句主體的lambda 表達式無法轉換為表達式樹」
使用EntityFramework 的Select方法時,您可能會遇到錯誤:「帶有語句主體的lambda表達式無法轉換為表達式樹。
理解錯誤:
在提供的程式碼片段中:
Obj[] myArray = objects.Select(o => { var someLocalVar = o.someVar; return new Obj() { Var1 = someLocalVar, Var2 = o.var2 }; });
lambda 表達式在傳回Obj 實例之前使用語句來宣告和使用局部變數someLocalVar。但是,EntityFramework 需要可以直接轉換為 SQL 的簡單表達式,以實現高效的資料庫執行。
解決方案:
要解決此錯誤,請透過刪除語句體並直接賦值:
Arr[] myArray = objects.Select(o => new Obj() { Var1 = o.someVar, Var2 = o.var2 });
透過此修改,lambda 表達式只包含一個簡單的表達式,可以翻譯成表達式樹,程式碼就能編譯成功。
以上是為什麼實體框架會拋出「帶有語句主體的 lambda 表達式無法轉換為表達式樹」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!