正如您所看到的,当我使用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;
}
}