首頁 > 後端開發 > C++ > 為什麼我的 LINQ 查詢失敗並顯示「無法建立類型的常數值...」?

為什麼我的 LINQ 查詢失敗並顯示「無法建立類型的常數值...」?

Linda Hamilton
發布: 2025-01-17 23:21:11
原創
113 人瀏覽過

Why Does My LINQ Query Fail with

LINQ 查詢錯誤:「無法建立類型為 API.Models.PersonProtocol 的常數值。此上下文中僅支援原始類型或枚舉類型」

本文將解決一個 LINQ 查詢中出現的錯誤,該錯誤源自於嘗試在 SELECT 子句中建立類型為 API.Models.PersonProtocol 的常數值。此上下文中僅允許原始類型或枚舉類型作為常數。

問題出在以下程式碼行:

<code class="language-csharp">personProtocol = (ICollection<personprotocol>) ppCombined
    .Where(a => a.personId == x.personId)
    .Select( b => new PersonProtocol()
     {
         personProtocolId = b.personProtocolId,
         activateDt = b.activateDt,
         personId = b.personId
     })</code>
登入後複製

此處,ppCombined 是一個記憶體中的 PersonProtocolType 物件集合。它無法直接與從資料庫檢索到的資料進行連接。

為了解決此錯誤,需要將 ppCombined 的過濾和映射操作移到 SELECT 子句之外。以下是修改後的程式碼:

<code class="language-csharp">var persons = db.Favorites
    .Where(f => f.userId == userId)
    .Join(db.Person, f => f.personId, p => p.personId, (f, p) =>
        new // 匿名对象
        {
            personId = p.personId,
            addressId = p.addressId,   
            favoriteId = f.favoriteId,
        })
    .AsEnumerable() // 数据库查询在此结束,其余部分是内存中的查询
    .Select(x =>
        new PersonDTO
        {
            personId = x.personId,
            addressId = x.addressId,   
            favoriteId = x.favoriteId,
            personProtocol = ppCombined
                .Where(p => p.personId == x.personId)
                .Select(p => new PersonProtocol
                {
                    personProtocolId = p.personProtocolId,
                    activateDt = p.activateDt,
                    personId = p.personId
                })
                .ToList()
        });</code>
登入後複製

在這個修改後的查詢中,ppCombined 集合首先在記憶體中進行過濾和映射,得到所需的 PersonProtocol 物件。然後,結果被賦值給 PersonDTO 物件的 personProtocol 屬性。 將對 ppCombined 的處理移至 AsEnumerable() 之後,避免了在資料庫查詢中使用記憶體集合。 AsEnumerable() 將資料庫查詢結果轉換為記憶體集合,之後的操作都在記憶體中進行,從而解決了原始錯誤。

以上是為什麼我的 LINQ 查詢失敗並顯示「無法建立類型的常數值...」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板