C# &引用;无法在LINQ to Entities查询中构造实体或复杂类型;内控器
我的控制器中有这个代码C# &引用;无法在LINQ to Entities查询中构造实体或复杂类型;内控器,c#,asp.net-mvc,linq,entity-framework,C#,Asp.net Mvc,Linq,Entity Framework,我的控制器中有这个代码 IQueryable<SellingItem> sellingitems = db.SellingItems .GroupBy(s => new { s.ItemId ,s.Condition,s.ExpInDays}) .Select(si => new SellingItem { Item = si.First().Item,
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),
});
IQueryable sellingitems=db.sellingitems
.GroupBy(s=>new{s.ItemId,s.Condition,s.ExpInDays})
.选择(si=>new SellingItem
{
Item=si.First().Item,
条件=si.First().条件,
ExpInDays=si.First().ExpInDays,
数量=总数量(i=>i数量),
});
当我尝试运行它时,我得到了
错误
无法在LINQ to Entities查询中构造实体或复杂类型
现在我发现我的linq查询太复杂,实体框架无法处理
所以我有两个变通办法,但我不喜欢两个
一,。
将整个表加载到内存中,并按如下方式进行查询
二,。
使用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),
});
当然,您需要确保这个特定类中的类型与其各自的类型相匹配
然后,您可以使用新类执行以下操作:
// 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),
});
//使用新类
IQueryable sellingitems=db.sellingitems
.GroupBy(s=>new{s.ItemId,s.Condition,s.ExpInDays})
.选择(si=>NewClass)
{
Item=si.First().Item,
条件=si.First().条件,
ExpInDays=si.First().ExpInDays,
数量=总数量(i=>i数量),
});
你能发布你的解决方法吗?这样我们就可以看到你的问题“解决”了吗?我还没有写代码,只是想知道该使用哪种解决方法,但我会尽快添加它们。不,我从那里来阅读我的问题,我不问错误是什么,我问我的解决方法是否好是的,现在我得到了,我正在为结果写一个新的类,希望它能工作,然后会回来更新,谢谢大家!!为什么我不能使用同一个类而不是NewClass?因为在上的注释中的原因,正如我在回答中所述:)简而言之,这是因为SellingItem
代表整个表,如果您只需要选定的数据片段,您应该创建一个与特定用例匹配的类。。。或者只是使用一个简单的匿名对象。祝你好运,我的朋友。希望我能帮上忙!让我们。
// 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),
});