2011-07-21 109 views
2

按月分组数据的最简单方法是什么?按月分组LINQ

在下面的例子中,有一个游戏列表,每个游戏都有玩过的日期和玩过的城市。如果我们想要得到每月玩的游戏数量,按月份分组,明智地使用像我这样的复合年月键?任何其他方法?包括那些不需要诉诸复合分组密钥的那些?

public static void GamesByMonth() 
{ 

    var games = new List<Game>() 
    { 
     new Game() { Date = new DateTime(2010, 11, 15), City = "Denver"}, 
     new Game() { Date = new DateTime(2011, 1, 11), City = "Chicago"}, 
     new Game() { Date = new DateTime(2011, 1, 10), City = "Houston"}, 
     new Game() { Date = new DateTime(2011, 3, 21), City = "Atlanta"}, 
     new Game() { Date = new DateTime(2011, 4, 18), City = "Denver"}, 
     new Game() { Date = new DateTime(2011, 4, 29), City = "Boston"} 

    }; 

    var groupings = 
     from game in games 
     group game by new 
      { 
       game.Date.Year, 
       game.Date.Month 
      }; 

} 

注:我今年包括在分组关键,因为,在这种情况下,我们希望在相对于游戏中的特定月份起的绝对数量时代潮流,不管一年。

+1

我认为这很简单,你可以做到这一点,而不会影响你的游戏类与月份和年份(或可能是一个综合财产)的属性。你可以用扩展方法做一些事情,但我认为这样做会过度。代码很清楚,所以我不会搞砸它:-)。 – Goblin

回答

1
var groupings = 
    from game in games 
    group game by new DateTime(game.Date.Year, game.Date.Month, 1) 
0

是的,这是明智的。然后,您只需在每个分组上使用Count即可获得每月的游戏数量。