LINQ:选择表中每分钟的第一个值

Jos*_*sef 1 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 |
+-------------+------------+---------------------+
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。

Tim*_*ter 7

因此,您想按分钟分组并仅显示每分钟的第一条记录:

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)