如何在Entity Framework中统计存在至少一个Hodnota1=1的分钟数
解决Entity Framework统计符合条件的分钟数问题
嘿,我来帮你搞定这个EF的分组统计需求!你的目标是统计指定时间范围内至少有一条Hodnota1=1记录的分钟数量,每分钟不管有多少条符合条件的记录都只算一次,对吧?
核心思路拆解
- 先过滤有效记录:首先我们只需要关心
Hodnota1 == 1的记录,所以在Where条件里要加上这个过滤,避免无效数据干扰分组。 - 按分钟维度分组:把每条记录的
Time字段截断到分钟级别(去掉秒、毫秒部分),这样同一分钟内的所有记录会被分到同一个组里。 - 统计分组数量:每个分组对应一个符合条件的分钟,所以直接对分组结果调用
Count()就能得到我们要的分钟数。
完整代码实现
public float RunPercent(DateTime start, DateTime end) { var countMinutes = db.ESP_LOG // 过滤时间范围 + 只保留Hodnota1=1的记录 .Where(t => t.Time > start && t.Time < end && t.Hodnota1 == 1) // 按分钟级别的时间戳分组 .GroupBy(t => new DateTime( t.Time.Year, t.Time.Month, t.Time.Day, t.Time.Hour, t.Time.Minute, 0 // 秒和毫秒设为0,统一到分钟起点 )) // 统计分组数量,即符合条件的分钟数 .Count(); return countMinutes; }
额外说明(针对不同EF版本)
如果你使用的是EF Core 3.0+,可以用更简洁的Truncate方法来截断时间到分钟:
.GroupBy(t => t.Time.Truncate(TimeSpan.FromMinutes(1)))
这个写法更直观,不过构造DateTime的方式兼容性更强,能适配大部分EF版本。
这样修改后,就能准确统计出至少有一条Hodnota1=1的分钟数量,和你预期的结果6完全匹配啦!
内容的提问来源于stack exchange,提问作者Jakub Dvorak
相关产品推荐
相关产品推荐

