You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用EF Core在单次查询中同时获取最小值和最大值?

解决方案

可以通过分组聚合的方式将两次数据库访问合并为一次,EF Core会将其翻译成包含MIN和MAX的单条SQL语句,仅执行一次查询:

var stats = context.Posts
    .Where(...) // 保留你的原有筛选条件
    .GroupBy(_ => 1) // 按常量分组,将所有符合条件的记录归为一组
    .Select(g => new 
    {
        MinStart = g.Min(p => p.Start),
        MaxEnd = g.Max(p => p.End)
    })
    .FirstOrDefault();

// 使用结果
var min = stats?.MinStart;
var max = stats?.MaxEnd;

说明

  • 原代码中Min()和Max()会分别触发一次数据库查询,因为每个聚合方法调用都会立即执行SQL。
  • 按常量1分组后,所有符合筛选条件的记录会被归为同一组,此时在分组内同时计算Min和Max,EF Core会生成一条包含两个聚合函数的SQL,仅访问一次数据库。
  • 如果没有匹配的记录,FirstOrDefault()会返回null,使用时需注意空值判断。

内容的提问来源于stack exchange,提问作者Alexander Blyth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:42:02