首页 >后端开发 >C++ >为什么我的linq到实体查询抛出'实体不能在linq中构造到实体查询”?

为什么我的linq到实体查询抛出'实体不能在linq中构造到实体查询”?

Barbara Streisand
Barbara Streisand原创
2025-02-01 14:46:11368浏览

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