【发布时间】:2011-11-11 03:11:01
【问题描述】:
是否可以按季度进行 linq 分组并将月份分组,即 Q1 Jan 到 apr 等
【问题讨论】:
是否可以按季度进行 linq 分组并将月份分组,即 Q1 Jan 到 apr 等
【问题讨论】:
类似的东西
Enumerable.Range(1,12)
.Select(o => new DateTime(DateTime.Today.Year, o, 1))
.GroupBy(o => (o.Month - 1) / 3)
【讨论】:
下面是一个基本示例:
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
显然,您需要通过添加一个或将它们转换为相应的枚举来更正季度数字。
【讨论】:
您可以使用 Select 方法和 GroupBy 的重载将任意列表分成几部分。在您的情况下,假设列表中的月份顺序正确,以下应该可以工作:
var groups = yourList
.Select((item, index) => new { item, index })
.GroupBy(indexedItem=>indexedItem.index/3);
【讨论】:
是的,如果您在数据库中的某处定义 qouters 或者您可以编写一些代码来处理此操作,则可以使用 LINQ to SQL GroupBy 函数来实现,这完全取决于您可用于此评估的数据。
【讨论】: