Группировка по месяцам с помощью LINQ - PullRequest
2 голосов
/ 22 июля 2011

Какой самый простой способ группировки данных по времени, по месяцам?

В приведенном ниже примере есть список игр, в каждой из которых указана дата и город, в котором была сыграна игра. Если мы хотим получить количество игр, сыгранных за месяц, сгруппировав их по месяцам, целесообразно ли использовать составной ключ год-месяц, как я? Любые другие подходы? Включая те, которые не требуют использования составного группирующего ключа?

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 ]

1 голос
/ 22 июля 2011
var groupings =
    from game in games
    group game by new DateTime(game.Date.Year, game.Date.Month, 1)
0 голосов
/ 22 июля 2011

Да, это разумно.Затем вы просто используете Count в каждой группе, чтобы получить количество игр в месяц.

...