按小时对记录进行分组时,.NET 无法在选择中使用日期时间

本文关键字:选择 时间 日期 NET 记录 小时 | 更新日期: 2023-09-27 17:56:31

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

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

按小时对记录进行分组时,.NET 无法在选择中使用日期时间

您必须按第一个时间戳的绝对小时数对数据进行分组,即为每个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))...