c# - LINQ:选择表中每分钟的第一个值
问题描述
我有这样的对象列表:
+-------------+------------+---------------------+
| ID | Value | Snapshot |
+-------------+------------+---------------------+
| 1 | 1 | 2019-03-07 20:00:04 |
| 2 | 2 | 2019-03-07 20:01:15 |
| 3 | 1 | 2019-03-07 20:01:23 |
| 4 | 3 | 2019-03-07 20:01:45 |
| 5 | 5 | 2019-03-07 20:02:10 |
| 6 | 7 | 2019-03-07 20:02:45 |
| 7 | 1 | 2019-03-07 20:03:10 |
| 8 | 0 | 2019-03-07 20:04:30 |
+-------------+------------+---------------------+
如何仅从每分钟或每小时中选择记录...
结果应该是这样的:
+-------------+------------+---------------------+
| ID | Value | Snapshot |
+-------------+------------+---------------------+
| 1 | 1 | 2019-03-07 20:00:04 |
| 2 | 2 | 2019-03-07 20:01:15 |
| 5 | 5 | 2019-03-07 20:02:10 |
| 7 | 1 | 2019-03-07 20:03:10 |
| 8 | 0 | 2019-03-07 20:04:30 |
+-------------+------------+---------------------+
在我使用 thisq SQL 查询获取这些记录的那一刻:
SELECT * FROM log
WHERE Snapshot IN ( SELECT MIN(Snapshot) AS snaptime FROM log GROUP BY DATE_FORMAT(snaptime,'%Y-%m-%d %H:%i'))
但如果可能的话,我需要以某种方式将此查询转换为 LINQ。
解决方案
所以你想按分钟分组并只显示每分钟的第一条记录:
var query = list
.OrderBy(x => x.Snapshot)
.GroupBy(x => x.Snapshot.Date.AddMinutes((int)x.Snapshot.TimeOfDay.TotalMinutes))
.Select(minuteGroup => minuteGroup.First());
推荐阅读
- haskell - 如何在 Haskell 中画线?
- asp.net-core - 在自定义类中访问 Blazor 服务器端的 AuthenticationStateProvider
- php - 无法使用数据库中的电子邮件和用户名登录(Codeigniter php)
- node.js - 回调必须是一个函数。收到空/socket.io/设置间隔
- c - 如何改变动态分配矩阵的大小?
- javascript - 在 javascript 模块之外动态调用函数
- python - 导入所有 Sympy 函数时如何使 lambda 成为符号?
- python - 导入stackapi模块识别
- javascript - REST API 删除请求和更新分页
- cmake - 未触发 cmake 依赖项