我试图按小时对记录列表进行分组,并存储每小时的记录数。这是我的代码:
DateTime firstTimeStamp = myRecords.DataBaseRecords.First().TimeStamp;
Statistics = myRecords.DataBaseRecords
.GroupBy(x => x.TimeStamp.Hour)
.Select(group => new GraphModel() { Date =firstTimeStamp.AddHours(group.Key), Value = group.Count() })
.ToList();
问题在于,当我选择功能时,我无法再访问DateTime,因此字段group.key包含0到24之间的值。我只需要按小时对所有记录进行分组。 foreach小时,我需要在Value参数中有记录数。
答案 0 :(得分:2)
您必须按照第一个时间戳的绝对小时数对数据进行分组,即为每个TimeStamp
值计算的小时数差异:
Statistics = myRecords.DataBaseRecords
.GroupBy(x => DbFunctions.DiffHours(firstTimeStamp, x.TimeStamp) into g
.Select(g => new GraphModel
{
Date = g.FirstOrDefault().TimeStamp,
Value = g.Count()
};
如果这是对象的LINQ(不是实体框架),则可以替换...
DbFunctions.DiffHours(firstTimeStamp, x.TimeStamp)
......来自
(x.TimeStamp - firstTimeStamp).TotalHours
如果它是LINQ to SQL,请使用
SqlMethods.DateDiffHour(firstTimeStamp, x.TimeStamp)
答案 1 :(得分:0)
也许这样的事可能对你有用:
DateTime myDateTime = new DateTime(DateTime.Parse(firstTimeStamp).AddHours(group.Key).Ticks);
具体回答上述问题:
...Date = new DateTime(DateTime.Parse(firstTimeStamp).AddHours(group.Key))...