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中文網其他相關文章!