根据某个属性的值将列表拆分为子列表
本文关键字:列表 拆分 属性 | 更新日期: 2023-09-27 18:26:33
我有一个事件列表,每个事件都有一个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
});
}
您需要按年份进行分组,如下所示:
eventsList.GroupBy(x => x.Year)
所以稍后您将能够遍历上面代码的结果:
foreach (var eventsInYear in eventsList.GroupBy(x => x.Year))
{
// eventsInYear.Key - year
// eventsInYear - collection of events in that year
}
使用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);
}
}