首頁 > 後端開發 > C++ > 為什麼我的linq到實體查詢拋出'實體不能在linq中構造到實體查詢”?

為什麼我的linq到實體查詢拋出'實體不能在linq中構造到實體查詢”?

Barbara Streisand
發布: 2025-02-01 14:46:11
原創
415 人瀏覽過

Why Does My LINQ to Entities Query Throw

LINQ to Entities 查詢錯誤:“無法在 LINQ to Entities 查詢中構造實體”

使用 Entity Framework 時,務必注意查詢執行過程中可能出現的異常。一個常見的錯誤是“無法在 LINQ to Entities 查詢中構造實體”,當嘗試將查詢結果投影到已映射的實體時會發生此錯誤。

錯誤原因

在給定的代碼片段中,查詢:

from p in db.Products
where p.CategoryID == categoryID
select new Product { Name = p.Name };
登入後複製

嘗試將查詢結果投影到 Product 實體的新實例上。但是,在 LINQ to Entities 查詢中,不能構造或重建實體,因為對象的狀體由 ORM 管理。

解決方案:使用匿名類型或 DTO

為了克服此錯誤並執行自定義選擇操作,您可以使用匿名類型或數據傳輸對象 (DTO)。匿名類型是一種臨時命名類型,可以保存一組屬性,而 DTO 則是一個自定義類,表示特定的域對象。

創建用於自定義選擇的 DTO

在本例中,由於您只需要 Name 屬性,您可以按如下方式創建 DTO:

public class ProductDTO
{
    public string Name { get; set; }
}
登入後複製

修改查詢以投影到 DTO

有了 DTO,您現在可以修改查詢以將其投影到 DTO 上:

public List<ProductDTO> GetProducts(int categoryID)
{
    return (from p in db.Products
            where p.CategoryID == categoryID
            select new ProductDTO { Name = p.Name }).ToList();
}
登入後複製

通過投影到 DTO,您可以成功檢索數據,同時避免“無法在 LINQ to Entities 查詢中構造實體”錯誤。

以上是為什麼我的linq到實體查詢拋出'實體不能在linq中構造到實體查詢”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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