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

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

Barbara Streisand
Barbara Streisand原創
2025-02-01 14:46:11418瀏覽

Why Does My LINQ to Entities Query Throw

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

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

錯誤原因

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

<code class="language-csharp">from p in db.Products
where p.CategoryID == categoryID
select new Product { Name = p.Name };</code>

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

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

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

創建用於自定義選擇的 DTO

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

<code class="language-csharp">public class ProductDTO
{
    public string Name { get; set; }
}</code>

修改查詢以投影到 DTO

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

<code class="language-csharp">public List<ProductDTO> GetProducts(int categoryID)
{
    return (from p in db.Products
            where p.CategoryID == categoryID
            select new ProductDTO { Name = p.Name }).ToList();
}</code>

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

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

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