我有这样的对象列表:
+-------------+------------+---------------------+
| 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 |
+-------------+------------+---------------------+
Run Code Online (Sandbox Code Playgroud)
如何只选择每分钟或每小时的记录...
结果应该是这样的:
+-------------+------------+---------------------+
| 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 |
+-------------+------------+---------------------+
Run Code Online (Sandbox Code Playgroud)
就在我使用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'))
Run Code Online (Sandbox Code Playgroud)
但我需要以某种方式将此查询转换为LINQ。
因此,您想按分钟分组并仅显示每分钟的第一条记录:
var query = list
.OrderBy(x => x.Snapshot)
.GroupBy(x => x.Snapshot.Date.AddMinutes((int)x.Snapshot.TimeOfDay.TotalMinutes))
.Select(minuteGroup => minuteGroup.First());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |