EntityFramework groupby 不像在 mysql 上那样工作

Ger*_*hes 0 mysql sql entity-framework entity-framework-core asp.net-core

我有以下 sql 查询

SELECT  statusId, statusName,sum(durationSeconds)/3600 as duration
    FROM status
    where date_local >=date
    and durationSeconds > 0
    group by statusId
    order by duration desc;
    
    
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 EF 核心做同样的事情。

  var result = await context.status
            .Where(e => e.ShiftdateLocal >= date && e.Durationseconds > 0)
            .Select(e => new LiveStatusProductionViewModel
            { StatusId = e.statusId, StatusName = e.statusName, Duration = e.Durationseconds / 3600 })
            //.GroupBy(e => e.Duration)
            .OrderByDescending(e => e.Duration)
            .ToListAsync();
            
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如何获得与 mysql 相同的结果?

Svy*_*liv 5

你只做了一半的工作,添加GroupBy但没有添加正确的投影。

var result = await context.status
        .Where(e => e.ShiftdateLocal >= date && e.Durationseconds > 0)
        .GroupBy(e => new { e.statusId, e.statusName })
        .Select(g => new LiveStatusProductionViewModel
        { 
           StatusId = g.Key.statusId, 
           StatusName = g.Key.statusName, 
           Duration = g.Sum(x => x.Durationseconds / 3600)
        })
        .OrderByDescending(e => e.Duration)
        .ToListAsync();
Run Code Online (Sandbox Code Playgroud)