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

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

Linda Hamilton
Linda Hamilton原創
2024-12-31 08:45:13878瀏覽

Why Does Entity Framework Throw

使用EntityFramework 時出現錯誤:「帶有語句主體的lambda 表達式無法轉換為表達式樹」

使用EntityFramework 的Select方法時,您可能會遇到錯誤:「帶有語句主體的lambda表達式無法轉換為表達式樹。

理解錯誤:

在提供的程式碼片段中:

Obj[] myArray = objects.Select(o =>
{
    var someLocalVar = o.someVar;

    return new Obj() {
    Var1 = someLocalVar,
    Var2 = o.var2 };
});

lambda 表達式在傳回O​​bj 實例之前使用語句來宣告和使用局部變數someLocalVar。但是,EntityFramework 需要可以直接轉換為 SQL 的簡單表達式,以實現高效的資料庫執行。

解決方案:

要解決此錯誤,請透過刪除語句體並直接賦值:

Arr[] myArray = objects.Select(o => new Obj() {
    Var1 = o.someVar,
    Var2 = o.var2 
});

透過此修改,lambda 表達式只包含一個簡單的表達式,可以翻譯成表達式樹,程式碼就能編譯成功。

以上是為什麼實體框架會拋出「帶有語句主體的 lambda 表達式無法轉換為表達式樹」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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