首頁 >後端開發 >C++ >為什麼實體框架會拋出「帶有語句主體的 Lambda 表達式無法轉換為表達式樹」?

為什麼實體框架會拋出「帶有語句主體的 Lambda 表達式無法轉換為表達式樹」?

Susan Sarandon
Susan Sarandon原創
2024-12-29 08:01:10190瀏覽

Why Does Entity Framework Throw

編譯器錯誤:「當帶有語句主體的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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn