不能在LINQ到实体查询中构造实体或复杂类型;在控制器
本文关键字:实体 复杂 类型 控制器 LINQ 查询 不能 | 更新日期: 2023-09-27 18:07:20
我有这个代码在我的控制器
IQueryable<SellingItem> sellingitems = db.SellingItems
.GroupBy(s => new { s.ItemId ,s.Condition,s.ExpInDays})
.Select(si => new SellingItem
{
Item = si.First().Item,
Condition = si.First().Condition,
ExpInDays = si.First().ExpInDays,
Qty = si.Sum(i => i.Qty),
});
,当我试图运行它时,我得到一个错误
不能在LINQ to Entities查询中构造实体或复杂类型
现在看来,我的linq查询太复杂,实体框架无法处理,
所以我有两个变通办法,但我不是都喜欢。
1。将整个表加载到内存中,并执行如下查询
2。使用SQL语句,这样会更快,但不会遵循实体框架规则
有更好的方法吗?
——更新 ---------------------------------
事实证明(谢谢大家)
写错了
现在看来,我的linq查询太复杂,实体框架无法处理,
不起作用,因为我对结果使用了相同的类。我创建了一个新的类,现在它工作惊人!!
您不需要使用任何变通方法来修复异常本身。问题是,SellingItem
是一个类,是你的实体框架模型的一部分。原因在这个答案的评论中解释了。
选择匿名对象,如下所示:
IQueryable<SellingItem> sellingitems = db.SellingItems
.GroupBy(s => new { s.ItemId ,s.Condition,s.ExpInDays})
.Select(si => new
{
Item = si.First().Item,
Condition = si.First().Condition,
ExpInDays = si.First().ExpInDays,
Qty = si.Sum(i => i.Qty),
});
或者为要执行的选择创建一个对象:
public class NewClass
{
public ItemClass Item { get;set; }
public ConditionClass Condition { get;set; }
public in ExpInDays { get;set; }
public int Qty { get;set; }
}
当然,您需要确保这个特定类中的类型与它们各自的类型匹配。
然后可以使用新类来执行select:
// Use new class
IQueryable<SellingItem> sellingitems = db.SellingItems
.GroupBy(s => new { s.ItemId ,s.Condition,s.ExpInDays})
.Select(si => new NewClass
{
Item = si.First().Item,
Condition = si.First().Condition,
ExpInDays = si.First().ExpInDays,
Qty = si.Sum(i => i.Qty),
});