【发布时间】:2020-07-06 23:44:26
【问题描述】:
我是 Linq 和实体框架的新手, 下面的代码和我想要的结果。 在那里 LINQPad 工作得很好,但是当我把它带到 net.core 我有这个错误:
.Sum(tot => tot.b.Price) 无法翻译。要么重写 以可翻译的形式查询,或切换到客户评估 通过插入对 AsEnumerable() 的调用,显式地 AsAsyncEnumerable()、ToList() 或 ToListAsync()
客户
ID - 名称
1 - 乔恩
2 - 亨利
3 - 最大
作品
ID - 价格 - ClientId
1 - 10 - 1
2 - 20 - 2
3 - 30 - 3
4 - 40 - 1
5 - 50 - 2
var result = await (from a in dbContext.Clients
join b in dbContext.Works on a.Id equals b.ClientId
where b.Price != 0
group new {a, b} by new {a.Name, b.Price} into g
select new
{
Name = g.Key.Name,
Total = g.Sum(tot => tot.b.Price)//here is the problem!!!!!!!
}).ToListAsync();
结果:
约翰 50
亨利 70
最多 30 个
【问题讨论】:
-
您对错误信息有什么不明白的地方?翻译部分还是“明确切换到客户评估”部分?
-
你为什么按价格分组。所以只需要按 ClientId 分组即可。
-
如果将
group new {a, b} by new {a.Name, b.Price} into g更改为group b.Price by new a.Name into g(并重构查询的其余部分)会发生什么?