EFCore 中 group 分组后,只选出每组中含有最大值的数据行

一、背景

最近在 工作流项目 里使用 EFCore 遇到需要 group 分组后,只选出每组中含有最大值的数据行。

二、解决方案

先分组用 group 找到分组中的最大值,再用  join  查出对应的行。

var groupFlows = Context.Set<TInstanceFlow>().AsNoTracking()
            .GroupBy(f => f.ProcessInstanceId)
            .Select(g => new { instanceId = g.Key, finish = g.Max(f => f.Finish) });

var flows = Context.Set<TInstanceFlow>().AsNoTracking()
          .Join(groupFlows,
            o => new { f1 = o.ProcessInstanceId, f2 = o.Finish },
            i => new { f1 = i.instanceId, f2 = i.finish },
            (o, i) => new { o, i })
          .Select(g => new
          {
            Id = g.o.Id,
            ProcessInstanceId = g.i.instanceId,
            IsCanUndo = g.o.IsCanUndo,
          });

关键点是红色部分的键值对匹配。

三、参考资料

select-rows-with-maximum-value-on-a-column-in-sql-server

 join-query-in-ef-core/

原文地址:https://www.cnblogs.com/citycomputing/p/14339715.html