代码之家  ›  专栏  ›  技术社区  ›  orandov

如何使用单个LINQ查询按事件按年分组?

  •  6
  • orandov  · 技术社区  · 15 年前

    我有一个表示事件的数据库表。该表有两个主要字段EventDate和EventTitle。

    我正在尝试按年份对事件进行分组,以便向用户显示这些事件。我尝试使用LINQ查询来提取具有事件的不同年份,并且每年都应该有该年份的事件列表。所以列表中的每个记录都有一年和事件列表

    我假设这可以通过一个LINQ查询完成,但是我的LINQ知识是基本的。 到目前为止,我只通过这个查询在列表中获得了不同的年份:

    var yearsList = (from e in Events
                     select e.EventDate.Year).Distinct();
    

    如何将事件列表添加到每年的记录中?

    3 回复  |  直到 9 年前
        1
  •  8
  •   Matt Hamilton    15 年前
    var yearsList = from e in Events
                    group e by e.EventDate.Year into g
                    select new { Year = g.Key, Events = g };
    

    这将为您提供一个具有“年”属性和“事件”属性的对象列表(该年的所有事件)。

    看看这个方便的参考资料: 101 Linq Samples .

        2
  •  7
  •   Jacob Proffitt    15 年前

    你真的在寻找一个有序的团队。

    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
        }
    }
    
        3
  •  1
  •   Abhijeet Patel    15 年前

    假设您有以下事件类

     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);
                    }
            }
    
    
       }
    }
    

    上面应该提供按年份分组的事件