分组后,我需要我的 LINQ 查询返回产品数据类型。它似乎被包裹在一个匿名的伪家庭中。
我在 Product 中有一些我不关心的属性,只需要 p.ID 和 p.Name 等。
我目前遇到的错误是:
The entity or complex type 'DatabaseModel.Product' cannot be constructed in a LINQ to Entities query.
这是我的方法:
public static List<Product> GetSellableSpecialOffers(DatabaseEntities db)
{
var query = from p in db.Products
where (p.Visible == true && p.Active == true)
&& p.ShowInSpecialOffers == true
group p by p.FamilyID == null ? 0 : p.FamilyID into f
select new Product {
ID = f.First().ID,
Name = f.First().Name,
Cost = f.First().Cost,
RRP = f.First().RRP
};
return query.ToList();
}
问题是什么?有没有更好的方法来解决这个问题?SQL 将始终返回 1 条记录,而不是将对象封装在辅助数据类型中,我不明白。
非常感谢,
编辑1:
我很抱歉扩展规范,但我需要以编程方式生成返回的产品,例如
select new Product {
ID = f.First().ID,
Name = f.First().Name,
Cost = f.OrderBy(p => p.NowCost).FirstOrDefault(),
RRP = f.First().RRP
}
或者如果我可以强烈键入家庭类:
public partial class ProductFamily
{
public Product GroupedProduct
{
get
{
return this.Products.OrderBy(p => p.NowCost).FirstOrDefault();
}
}
}
然后我会这样做:
var query = (from p in db.Products
where (p.Visible == true && p.Active == true)
&& p.ShowInSpecialOffers == true
group p by p.ProductFamily == null ? null : p.ProductFamily into f
select f.GroupedProduct).ToList<Product>();
但是我无法使用我所拥有的解决方案。