首页 > 解决方案 > EntityFramework Core Group By 和 Sum

问题描述

有一段时间没有写任何代码了,我正试图通过为我的孩子编写一个小应用程序来跟踪他们在夏天读过的书来摆脱锈迹。DB很简单,只有3个表。1 表示书籍(标题、作者、页面等),1 表示读者姓名,1 是实际阅读日志(他们阅读的每本书 1 行,外键与书表和读者表的关系)。

尝试使用 EntityFramework 核心编写一个查询,该查询将返回阅读器读取的总页数。我可以在 SSMS 中运行它,它工作正常

select r.Name, sum(b.Pages) as PagesRead
from ReadingLog rl
inner join Readers r on rl.ReaderId = r.Id
inner join Books b on rl.BookId = b.Id
where rl.IsActive = 1
group by r.Name

我试着在 EF 中这样写:

var pagesByReader = _context.ReadingLog
                            .Where(m => m.IsActive)
                            .GroupBy(m => m.Reader.Name)
                            .Select(m => new GraphViewModel()
                                   {
                                      Reader = m.Key,
                                      PagesRead = m.Sum(b => b.Book.Pages)
                                   })
                            .ToList();

但我在运行时收到此错误:).Book.Pages' 无法翻译。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估

我想我只是写错了 EF 查询,但我不知道为什么。任何帮助表示赞赏

标签: c#linqentity-framework-core

解决方案


看起来你m.Keyselect. 使用时GroupBy,选择中未在 group by 中定义的所有值都必须在聚合函数中。

尝试更改m.Keym.Key.First()


推荐阅读