【发布时间】:2019-12-26 16:32:25
【问题描述】:
我需要这方面的帮助,我有一段非常重要的代码,我从这个线程得到了帮助
代码如下:
var pln = db.tabStockPlanners
.Where(y => y.ExpectedHarvestDate < addoneyear)
.Where(r => r.Published == 1)
.Where(f => f.Available == 1);
var gruppedList = pln.GroupBy(x => x.ItemID, (key, enumerable) =>
{
return new tabStockPlanner { ItemID = key, ExpectedYieldInTonnes = enumerable.Sum(k => k.ExpectedYieldInTonnes) };
}).OrderByDescending(t => t.ExpectedYieldInTonnes).ToList();
但我得到一个错误
带有语句体的 lambda 表达式不能转换为表达式树
我不知道这是否与 EF 有所不同。有人可以帮我弄这个吗? EF 是版本 6。当前代码有问题吗?
更新
完美的做法是:
var gplist = from x in db.tabStockPlanners
where x.Published == 1
where x.Available == 1
where x.ExpectedHarvestDate < addoneyear
group x.ExpectedYieldInTonnes by new { x.ItemID }
into g
select new { g.Key.ItemID, ExpectedYieldInTonnes = g.Sum() };
但我也想按照这个语法得到正确的答案。也许有人可以使用 LINQ 语法重新发布。谢谢。
更新
你好朋友; @YosefBinmal 解决方案运行良好,连同@NetMage 对AsEnumerable() 的提议,我发布了 Yosef 的解决方案,并对其进行了修改以使其匿名并仅返回所需的 2 列。我删除了tabStockPlanner,所以它的new { 是实心的。所以将其标记为正确。有异议吗?效果很好。
这是修改后的代码
var pln = db.tabStockPlanners
.Where(y => y.ExpectedHarvestDate < addoneyear)
.Where(r => r.Published == 1)
.Where(f => f.Available == 1);
var gruppedList = pln
.AsEnumerable()
.GroupBy(i => i.ItemID)
.Select(g => new { ItemID = g.Key, ExpectedYieldInTonnes = g.Sum(i => i.ExpectedYieldInTonnes) })
.OrderByDescending(t => t.ExpectedYieldInTonnes)
.ToList();
【问题讨论】:
-
我想你确实更新了框架?
-
尝试用新的 { key, enumerable } 替换元组 (key, enumerable)。 EF6 中的元组对我不起作用
-
这在 EF6 及更早版本中从未受支持。你一定改变了什么。与另一个问题的不同之处在于答案以
ToList()结束了第一个查询。 -
@Gleb 是的,我确实更新到了 EF6,以前这有效。