一尘不染

无法在LINQ to Entities查询中构造实体

c#

有一个称为产品的实体类型,是由实体框架生成的。我已经写了这个查询

public IQueryable<Product> GetProducts(int categoryID)
{
    return from p in db.Products
           where p.CategoryID== categoryID
           select new Product { Name = p.Name};
}

下面的代码引发以下错误:

“无法在LINQ to Entities查询中构造实体或复杂类型Shop.Product”

var products = productRepository.GetProducts(1).Tolist();

但是当我使用select p代替select new Product { Name = p.Name};它时,它可以正常工作。

如何执行自定义选择部分?


阅读 182

收藏
2020-05-19

共1个答案

一尘不染

您不能(也应该不能)投影到映射的实体上。但是,您可以投影到匿名类型或DTO上

public class ProductDTO
{
    public string Name { get; set; }
    // Other field you may need from the Product entity
}

您的方法将返回DTO的列表。

public List<ProductDTO> GetProducts(int categoryID)
{
    return (from p in db.Products
            where p.CategoryID == categoryID
            select new ProductDTO { Name = p.Name }).ToList();
}
2020-05-19