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

C#根据某个属性的值将列表拆分为子列表?,c#,list,C#,List,我有一个事件列表,每个事件都有一个datetime属性。我需要按年份将列表分成子列表。诀窍是,我的事件列表是从数据库中提取出来的,可能会发生变化,所以我不能只是硬编码年份集,并将事件排序到正确的年份。是否有一种方法可以将我的主要事件列表拆分为子列表,以便在每个子列表中,每个事件都具有相同的年份?所以我最终会得到一个2010年所有事件的子列表,一个2011年所有事件的子列表,依此类推 我的列表是这样创建的: foreach (var ev in eventResults) {

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

GroupBy是您正在寻找的:顺便说一句,事件是一个关键字,您不能立即使用它,应该是@event@Vladimirs:接得好。这非常有用。刚刚又爱上了C#。分组后,你会如何根据年份分别列出清单?@KenGordon
GroupBy
返回
IEnumerable
,因为
IGroupping
实现了
IEnumerable
,你可以简单地调用
ToList
。但是,我不太明白您为什么需要它,
I分组
的目的是提供对分组键(年份)的引用。如果您不喜欢
i分组
,可以将其重新组织为
i词典
。如果您声明
var dict=newdictionary()
outside
foreach
loop,然后可以通过调用
dict.Add(eventsInYear.Key,eventsInYear.ToList())来填充它@Vladimirs这对我来说有点新鲜,我想看看如何将列表的各个部分划分为不同的列表,例如,如果你想要3个包含三年的列表。这更有意义吗?@Ken这里有
var year2000=eventsList.GroupBy(x=>x.Year).FirstOrDefault(x=>x.Key==2000.ToList();var year2001=eventsList.GroupBy(x=>x.Year).FirstOrDefault(x=>x.Key==2001.ToList();var year2002=eventsList.GroupBy(x=>x.Year).FirstOrDefault(x=>x.Key==2002.ToList()