我有一个表示事件的数据库表。该表有两个主要字段EventDate和EventTitle。
我正在尝试按年份对事件进行分组,以显示给用户。我正在尝试使用Linq查询来提取具有事件的不同年份,并且对于每一年应该有该年的事件列表。因此,列表中的每个记录都有年份和事件列表
我假设这可以用一个linq查询来完成,但我的linq知识是基本的。到目前为止,我只使用下面的查询获得了列表中的不同年份:
var yearsList = (from e in Events
select e.EventDate.Year).Distinct();
如何将事件列表添加到每年的记录中?
发布于 2009-09-30 15:38:03
var yearsList = from e in Events
group e by e.EventDate.Year into g
select new { Year = g.Key, Events = g };
这将为您提供一个具有"Year“属性和" events”属性(该年的所有事件)的对象列表。
看看这个方便的参考资料:101 Linq Samples。
发布于 2009-09-30 15:39:24
您实际上是在寻找一个有序的组。
var yearsList = from e in Events
group e by e.EventDate.Year into g
orderby g.Key
select g;
foreach(var yearGroup in yearsList)
{
int year = yearGroup.Key;
foreach(Event e in yearGroup)
{
// do something with the events
}
}
发布于 2009-09-30 15:43:55
假设您有以下事件类
public class Event
{
public int Year { get; set; }
public string Name { get; set; }
public static Event[] GetEvents()
{
return new Event[]
{
new Event{ Name="Event1", Year=2001},
new Event{ Name="Event2", Year=2002},
new Event{ Name="Event3", Year=2003},
new Event{ Name="Event4", Year=2001},
new Event{ Name="Event5", Year=2002},
new Event{ Name="Event6", Year=2003},
new Event{ Name="Event7", Year=2001},
new Event{ Name="Event8", Year=2002},
new Event{ Name="Event9", Year=2003}
};
}
}
public class Program
{
static void Main(string[] args)
{
var groupedEvents = Event.GetEvents().GroupBy(e => e.Year);
foreach (var groupedEvent in groupedEvents)
{
Console.WriteLine("Year:{0}",groupedEvent.Key);
foreach (var evnt in groupedEvent)
{
Console.WriteLine("---- Event Name:{0}",evnt.Name);
}
}
}
}
上面的内容应该会给出按年份分组的事件
https://stackoverflow.com/questions/1501188
复制