【问题标题】:LINQ group by problemLINQ 按问题分组
【发布时间】:2011-04-01 22:05:24
【问题描述】:

我遇到了 LINQ 的问题。

这是代码,

    public class TimeObject
    {
        public DateTime Time { get; set; }
    }

    private void TestLINQ()
    {
        List<TimeObject> results = new List<TimeObject>();

        results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 0, 10, 0)});
        results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 0, 20, 0)});
        results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 0, 30, 0)});
        results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 0, 40, 0)});
        results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 0, 50, 0)});
        results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 1, 10, 0)});
        results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 1, 20, 0)});
        results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 1, 30, 0)});
        results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 1, 40, 0)});
        results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 2, 15, 0)});
        results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 2, 30, 0)});

        var counts = from result in results
                        group result by result.Time.Date.Hour into groupedResult
                        select new { Hour = groupedResult.Key, Count = groupedResult.Count() };

        foreach (var count in counts)
        {
            MessageBox.Show(count.Hour + " - " + count.Count);
        }
    }

我期望的输出是 0 - 5, 1 - 4, 2 - 2

但我总是得到 0 - 12。为什么不按小时分组?

请帮助我。谢谢。

【问题讨论】:

    标签: c# .net .net-3.5 c#-3.0


    【解决方案1】:

    .Date 去掉了小时等部分,只给你一个日期。尝试按 result.Time.Hour 分组。

    【讨论】:

      【解决方案2】:

      当您在DateTime 上使用.Date 时,时间将设置为零。所以用这个:

      var counts = from result in results
                   group result by result.Time.Hour into groupedResult
                   select new { Hour = groupedResult.Key, Count = groupedResult.Count() };
      

      【讨论】:

        【解决方案3】:

        result.Time.Date.Hour 更改为result.Time.Hour

        【讨论】:

        • Gr8。非常感谢。通过将其更改为 result.Time.Hour 它可以工作:)
        【解决方案4】:

        尝试使用 DateTime 转换直接将 group result by result.Time.Date.Hour 转换为小时值,而不是使用 Time 对象的属性。 LINQ 语句可能会在 Time 属性处停止分组操作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-09
          • 2012-04-17
          • 1970-01-01
          相关资源
          最近更新 更多