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

Eri*_*ert 21 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
        });
    }
Run Code Online (Sandbox Code Playgroud)

Vla*_*irs 43

您需要按年进行分组:

eventsList.GroupBy(x => x.Year)
Run Code Online (Sandbox Code Playgroud)

所以稍后您将能够遍历上面的代码结果:

foreach (var eventsInYear in eventsList.GroupBy(x => x.Year))
{
    // eventsInYear.Key - year
    // eventsInYear - collection of events in that year
}
Run Code Online (Sandbox Code Playgroud)

  • 这非常有用.刚刚再次爱上了C#. (3认同)
  • 分组后,您将如何根据年份单独列出列表? (2认同)
  • @Ken 在这里 `varyear2000 = eventsList.GroupBy(x => x.Year).FirstOrDefault(x => x.Key == 2000).ToList(); varyear2001 = eventsList.GroupBy(x => x.Year).FirstOrDefault(x => x.Key == 2001).ToList(); varyear2002 = eventsList.GroupBy(x => x.Year).FirstOrDefault(x => x.Key == 2002).ToList();` (2认同)

Mat*_*and 7

使用GroupBy:

var eventsByYear = eventsList.GroupBy(a => a.Year);
Run Code Online (Sandbox Code Playgroud)

然后,您可以遍历该集合以处理每年:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)