我有一个代表Events的数据库表。该表有两个主要字段EventDate和EventTitle。
我正在尝试按年份对事件进行分组以显示给用户。我正在尝试使用Linq查询来拉动具有事件的不同年份,并且每年应该有一个事件列表。因此,列表中的每条记录都有一年和事件列表
我认为这可以通过一个linq查询完成,但我的linq知识是基本的。 到目前为止,我只在这个查询的列表中得到了不同的年份:
var yearsList = (from e in Events
select e.EventDate.Year).Distinct();
如何向每年记录添加事件列表?
答案 0 :(得分:8)
var yearsList = from e in Events
group e by e.EventDate.Year into g
select new { Year = g.Key, Events = g };
这将为您提供具有“年”属性和“事件”属性的对象列表(该年度的所有事件)。
看看这个方便的参考:101 Linq Samples。
答案 1 :(得分:7)
你真的在寻找一个有序的团体。
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
}
}
答案 2 :(得分:1)
假设您有以下事件类
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);
}
}
}
}
以上内容应该为您提供按年度分组的事件