Linq集团按季度分组

有没有可能做一个linq小组和分组几个季度,即Q1 1月到apr等等

像这样的东西

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

这是一个certificate这一点的基本例子:

 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 

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

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

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

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