【问题标题】:Linq group month by quartersLinq 按季度分组
【发布时间】:2011-11-11 03:11:01
【问题描述】:

是否可以按季度进行 linq 分组并将月份分组,即 Q1 Jan 到 apr 等

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    类似的东西

    Enumerable.Range(1,12)
        .Select(o => new DateTime(DateTime.Today.Year, o, 1))
        .GroupBy(o => (o.Month - 1) / 3)
    

    【讨论】:

    • 很好,很高兴你可以使用整数魔法来解决这个问题!
    【解决方案2】:

    下面是一个基本示例:

    var dates = new[]
                        {
                            new DateTime(2011, 12, 25), 
                            new DateTime(2011, 11, 25),
                            new DateTime(2011, 5, 4),
                            new DateTime(2011, 1, 3), 
                            new DateTime(2011, 8, 9),
                            new DateTime(2011, 2, 14),
                            new DateTime(2011, 7, 4),
                            new DateTime(2011, 11, 11)
                        };
    
    var groupedByQuarter = from date in dates
                            group date by (date.Month - 1)/3
                            into groupedDates
                            orderby groupedDates.Key
                            select groupedDates;
    
    
    foreach(var quarter in groupedByQuarter)
    {
        Console.WriteLine("Q: {0}, Dates: {1}", quarter.Key, string.Join(", ", quarter));
    }
    

    排序只是为了帮助按逻辑对宿舍进行排序。您可以删除 group 语句之后的整个子句。

    输出:

    Q: 0, Dates: 1/3/2011 12:00:00 AM, 2/14/2011 12:00:00 AM
    Q: 1, Dates: 5/4/2011 12:00:00 AM
    Q: 2, Dates: 8/9/2011 12:00:00 AM, 7/4/2011 12:00:00 AM
    Q: 3, Dates: 12/25/2011 12:00:00 AM, 11/25/2011 12:00:00 AM, 11/11/2011 12:00:00 AM
    

    显然,您需要通过添加一个或将它们转换为相应的枚举来更正季度数字。

    【讨论】:

      【解决方案3】:

      您可以使用 Select 方法和 GroupBy 的重载将任意列表分成几部分。在您的情况下,假设列表中的月份顺序正确,以下应该可以工作:

      var groups = yourList
          .Select((item, index) => new { item, index })
          .GroupBy(indexedItem=>indexedItem.index/3);
      

      【讨论】:

      • 很好的例子,但如果他的月份没有按时间顺序排列怎么办
      • @COLDTOLD :那么 liho1eye 或您的答案会更好:D 可能
      【解决方案4】:

      是的,如果您在数据库中的某处定义 qouters 或者您可以编写一些代码来处理此操作,则可以使用 LINQ to SQL GroupBy 函数来实现,这完全取决于您可用于此评估的数据。

      【讨论】:

        猜你喜欢
        • 2012-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多