編譯器錯誤:「當帶有語句主體的Lambda 表達式無法轉換為表達式樹」
使用EntityFramework 時,您可能會遇到錯誤宣告:「帶有語句主體的lambda 表達式無法轉換為表達式樹。」當您嘗試在僅允許表達式lambda 的上下文中使用帶有區塊語句(也稱為語句 lambda)的 lambda 表達式時,會發生此錯誤。
問題
如錯誤訊息所示,EntityFramework 需要表達式 lambda,它們是沒有任何區塊語句的簡潔表達式。在提供的範例中,lambda 表達式:
Obj[] myArray = objects.Select(o => { var someLocalVar = o.someVar; return new Obj() { Var1 = someLocalVar, Var2 = o.var2 }; });
包含區塊語句,使其成為語句 lambda。 EntityFramework 無法將此表達式轉換為適合執行資料庫查詢的形式。
解決方案
要解決該錯誤,請重構您的 lambda 表達式以使用表達式 lambda。表達式 lambda 是單行表達式,無需使用任何其他語句即可直接傳回值。在這種情況下,您可以將 lambda 重寫如下:
Obj[] myArray = objects.Select(o => new Obj() { Var1 = o.someVar, Var2 = o.var2 });
這個表達式 lambda 消除了 block 語句,直接傳回一個新的 Obj 物件。這種形式與EntityFramework對表達式樹的期望相容,並且將解決編譯錯誤。
以上是為什麼實體框架會拋出「帶有語句主體的 Lambda 表達式無法轉換為表達式樹」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!