Linq集团按季度分组

时间:2011-11-11 03:11:02

标签: c# linq

是否有可能成为一个linq小组,分组几个季度,即Q1 Jan到apr等等

4 个答案:

答案 0 :(得分:13)

像这样的东西

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

答案 1 :(得分:5)

这是一个证明这一点的基本例子:

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));
}

订单是否只是帮助按季度订购。您可以在组声明后删除整个子句。

输出:

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

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

答案 2 :(得分:3)

您可以使用Select方法和GroupBy的重载将任意列表划分为多个部分。在您的情况下,假设列表中的月份顺序正确,以下内容应该有效:

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

答案 3 :(得分:-1)

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

相关问题