使用LINQ按月分组

时间:2011-07-21 21:35:26

标签: linq key grouping composite

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

在下面的例子中,有一个游戏列表,其中每个游戏都有玩耍的日期和玩游戏的城市。如果我们想要获得每个月玩游戏的数量,通过按月分组,是否明智像我这样使用复合年月密钥?还有其他方法吗?包括那些不需要求助于复合分组键的那些?

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

}

注意:我在分组键中包含年份,因为在这种情况下,我们希望随着时间的推移趋势,而不是特定月份的游戏绝对数量,而不管年份。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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