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