我有一个数据表,其列为名称,代码,dateAndTime。现在,我想使用LINQ来获取一天中每小时的所有记录数。
DateTime列包含的数据为
2018-08-01 07:00:06.163
2018-08-01 07:50:11.873
2018-08-01 08:00:42.623
2018-08-01 07:20:48.363
2018-08-01 09:01:15.243
2018-08-01 06:01:16.507
现在我想获取从一天开始到一天结束时每小时所有记录的计数。
示例为:
如果第一条记录是在2018-08-01上午5点左右,那么第一行的记录是从凌晨5点到上午7点
2018-08-01 7 ( 5 Am - 7 Am) - 36 count
2018-08-01 9 ( 7 Am - 9 Am) - 12 count
2018-08-01 11 ( 9 Am - 11 Am) - 12 count
2018-08-01 13 (11 Am - 1 PM)- 0 count
2018-08-01 15 (1 PM - 3 PM)- 36 count
答案 0 :(得分:1)
您可以尝试以下代码:
const int groupHours = 2;
const int driftHours = 1;
var dateTimes = new List<DateTime>() { new DateTime(2018, 8, 30, 7, 0, 6), new DateTime(2018, 8, 30, 8, 0, 6) };
var result = dateTimes.GroupBy(d => new DateTime(d.Year, d.Month, d.Day, (((d.Hour - driftHours) / groupHours) + 1) * groupHours + driftHours, 0, 0)).Select(g => new { Key = g.Key, Count = g.Count() });
(((d.Hour - driftHours) / groupHours) + 1) * groupHours + driftHours
上午8点的示例: