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

时间:2014-10-15 13:08:28

标签: c# list

我有一个事件列表,每个事件都有一个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
        });
    }

2 个答案:

答案 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);
    }
}