【问题标题】:linq group by hour range?linq 按小时范围分组?
【发布时间】:2012-11-09 14:58:05
【问题描述】:

我按小时对数据进行分组,如下所示:

group c by new { date = new DateTime(Date.Year, Date.Month, Date.Day, Date.Hour, 5, 0), name = c.Name } into g

我想得到这样的东西:10.05 - 11.05 当我调试代码时,日期会像我预期的那样返回。但是数据仍然在10.00 - 11.00之间分组。

希望我能解释一下。这样做的逻辑是什么?

谢谢。

【问题讨论】:

    标签: c# linq group-by


    【解决方案1】:
    let offSetDate = Date.AddMinutes(-5)  //shift back so that Year,Month,Day,Hour are all that matter.
    let groupKey = new {
      date = new DateTime(offSetDate.Year, offSetDate.Month, offSetDate.Day, offSetDate.Hour, 5, 0),
      name = c.Name
    }
    group c by groupKey into g
    

    【讨论】:

      【解决方案2】:
      var groups = dList.GroupBy(d => (d.Ticks - 5*TimeSpan.TicksPerMinute) / TimeSpan.TicksPerHour)
                      .Select(g => g.ToList())
                      .ToList();
      

      【讨论】:

      • 它有效,但我应该找回我的日期(10:05)。但它返回ReadDate = {01.01.0001 00:00:00} System.DateTime 我的预期例如ReadDate = {09.11.2012 10:05:45}
      • @AliRızaAdıyahşi 我不知道你是如何使用它的,因为你没有展示你的真实代码。但这里的重点是ticks的使用。其他部分只是 linq 技巧(不要使用组的Key)。
      猜你喜欢
      • 1970-01-01
      • 2015-05-07
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      相关资源
      最近更新 更多