实体或复杂类型'AdventureWorks2012Model.Product'不能在LINQ到实体查询



正如您所看到的,当我使用Kendo UI构建Data grid时,我得到了这个错误。有没有人可以指出我在下面的代码中哪里错了?

 private IEnumerable<Product> GetSubProduct()
         {
             var context = new AdvenDBEntities();
             var subcate = context.Products.Select(p => new Product
             {
                 ProductID = p.ProductID,
                 Name = p.Name,
                 Color = p.Color,
                 ListPrice = p.ListPrice,
             }).ToList();
            return subcate;
          }

错误:The entity or complex type 'AdventureWorks2012Model.Product' cannot be constructed in a LINQ to Entities query.非常感谢您的宝贵时间!

既然Product是模型的实体,你正在创建这个实体的新对象,同时选择记录,这不是一个好主意,我不确定模型将如何处理这种行为,这就是为什么它阻止你这样做,(我猜)。总之你可以把代码改成

private IEnumerable<Product> GetSubProduct()
{
    var context = new AdvenDBEntities();
    var subcate = context.Products.ToList();
    return subcate;
}

顺便说一句,你的函数名表明你缺少一个Where子句。

也可以创建一些自定义的DTO类并使用它。

class ProductDTO
{
    public int ProductID { get; set; }
    public string Name { get; set; }
    public string Color { get; set; }
    public decimal ListPrice { get; set; }
}
private IEnumerable<ProductDTO> GetSubProduct()
{
    var context = new AdvenDBEntities();
    var subcate = context.Products.Select(p => new ProductDTO
                        {
                            ProductID = p.ProductID,
                            Name = p.Name,
                            Color = p.Color,
                            ListPrice = p.ListPrice,
                        }).ToList();
    return subcate;
}

我可以为您指出的第一个臭味代码。DBContext实现了IDisposable,所以你负责调用Dispose。除了一种情况,在这里,使用block

你必须构建查询来获取所有的产品,然后从中提取。

private IEnumerable<Product> GetSubProduct()
{
         using (var context = new AdvenDBEntities())
         {
              // Get all constructed type product and then select from it
              var subcate = context.Products
               .ToList()       
               .Select(p => new Product
               {
                 ProductID = p.ProductID,
                 Name = p.Name,
                 Color = p.Color,
                 ListPrice = p.ListPrice,
               });
              return subcate;
        }
 } 

相关内容

  • 没有找到相关文章

最新更新