[英]EntityFramework Core 6.0 Linq Group Join problem ( on "into" word)
[英]EntityFramework Core Group By with Sum
有一段時間沒有寫任何代碼了,我正試圖通過為我的孩子編寫一個小應用程序來跟蹤他們在夏天讀過的書來擺脫 rust。 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 查詢,但我不知道為什么。 任何幫助表示贊賞
看起來您在m.Key
中有select
。 使用GroupBy
時,select 中未在 group by 中定義的所有值必須在聚合 function 中。
嘗試將m.Key
更改為m.Key.First()
正如評論中提到的,sql 被翻譯成 Linq,就像下面的代碼:
var result = (from rl in _context.ReadingLog
join r in _context.Readers on rl.ReaderId equals r.Id
join b in _context.Books on rl.BookId equals b.Id
where rl.IsActive
group new {r,b} by r.Name int g
select
new GraphViewModel
{
Reader = g.Key,
PagesRead = g.Sum(x => x.b.Pages)
}).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.