.NET按小时分组记录时,无法在select中使用datetime

时间:2016-07-12 18:01:49

标签: c# .net linq datetime request

我试图按小时对记录列表进行分组,并存储每小时的记录数。这是我的代码:

        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参数中有记录数。

2 个答案:

答案 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))...