十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
一、背景
武义网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。成都创新互联成立与2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联。
最近在一个项目里使用 EFCore 遇到需要 group 分组后,只选出每组中含有最大值的数据行。
二、解决方案
先分组用 group 找到分组中的最大值,再用 join 查出对应的行。
var groupFlows = Context.SetTInstanceFlow().AsNoTracking()
.GroupBy(f = f.ProcessInstanceId)
.Select(g = new { instanceId = g.Key, finish = g.Max(f = f.Finish) });
var flows = Context.SetTInstanceFlow().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/
可以使用查询语句检查是否插入成功:
目前支持贪婪加载:使用Include加载 关联表 的数据,这种方式 使用一条Join的 Sql语句进行查询;
贪婪加载的优势在于仅执行1次SQL查询即返回所需要的结果。但使用JOIN查询在数据库记录条数较多时,多条简单的SQL查询往往比一条复杂的JOIN查询效率要好。
数据库的顺序是有严格定义的,分物理顺序、逻辑顺序!! 物理顺序默认根据插入时间排列,也可以通过特定sql语句控制。
模式不对。efcore只有在Debug模式下才打印sql,所以我们在F5运行之前,需要调整调试模式,不要选择IISExpress,选择自己的项目web名称的那个,就可以打印了。