我正在尝试按小时对记录列表进行分组并存储每小时的记录数。这是我的代码:
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,因此字段组.key包含 0 到 24 之间的值。我只需要按小时和每小时对所有记录进行分组,我需要在 Value 参数中拥有记录数。
您必须按第一个时间戳的绝对小时数对数据进行分组,即为每个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)
也许这样的事情可能会适合您:
DateTime myDateTime = new DateTime(DateTime.Parse(firstTimeStamp).AddHours(group.Key).Ticks);
具体回答上述问题:
...Date = new DateTime(DateTime.Parse(firstTimeStamp).AddHours(group.Key))...