我有一个事件列表,每个事件都有一个datetime属性。我需要按年将列表拆分为子列表。诀窍是,我的事件列表是从数据库中提取的,可能会发生变化,所以我不能只对这些年份进行硬编码并将事件排序到正确的年份。有没有办法可以将我的主要事件列表拆分为子列表,以便在每个子列表中,每个事件都在同一年?所以我最终会得到所有2010年活动的子列表,所有2011年活动的子列表,等等。
我的列表是这样创建的:
foreach (var ev in eventResults)
{
eventsList.Add(new Event()
{
Name = ev.Title,
Month = CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(ev.StartDate.Month),
Day = ev.StartDate.Day,
Year = ev.StartDate.Year
});
}
答案 0 :(得分:38)
你需要像这样grouping by年:
eventsList.GroupBy(x => x.Year)
所以稍后您将能够遍历上面的代码结果:
foreach (var eventsInYear in eventsList.GroupBy(x => x.Year))
{
// eventsInYear.Key - year
// eventsInYear - collection of events in that year
}
答案 1 :(得分:6)
使用GroupBy:
var eventsByYear = eventsList.GroupBy(a => a.Year);
然后,您可以遍历该集合来处理每年:
foreach (var yearEvents in eventsByYear)
{
// yearEvents contains all the events for one particular year
Console.WriteLine("Events for year: " + yearEvents.Key);
foreach (var e in yearEvents)
{
Console.WriteLine(e);
}
}