根据某个属性的值将列表拆分为子列表

本文关键字:列表 拆分 属性 | 更新日期: 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);
    }
}