一、背景
最近在 工作流项目 里使用 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, });
关键点是红色部分的键值对匹配。
三、参考资料