Как лучше всего посчитать сбор дат по кварталам? - PullRequest
2 голосов
/ 24 августа 2011

У меня есть коллекция дат:

 IEnumerable<DateTime> Events;

И я хочу посчитать и распределить по кварталам (первый квартал 2011 года, второй квартал 2011 года и т. Д.), Где каждый квартал представляет трехмесячные сегменты.

Я начал делать это «вручную» с помощью цикла и отдельного словаря, но я подумал, что может быть более элегантный способ использовать LINQ и т. Д. Для этого преобразования.

Я хочу получить структуру данных, которая выглядит следующим образом:

 public List<QuarterInfo> QuarterBreakdown

где QuarterInfo просто:

 public class QuarterInfo
 {
     public int QuarterOfYear; //1, 2, 3 or 4
     public int Year;
     public IEnumerable<DateTime> Events;
 }

ОТМЕТЬТЕ, что вышеупомянутое было моим размышлением, но я более чем открыт для предложений о других способах достижения этого.

Ответы [ 2 ]

5 голосов
/ 24 августа 2011

Pure LINQ, используя GroupBy:

var result = Events
    .Select(d => new { DateTime = d, Q = (d.Month - 1) / 3 })
    .GroupBy(a => new { a.Q, a.DateTime.Year })
    .Select(a => new QuarterInfo
        {
            Events = a.Select(s => s.DateTime),
            QuarterOfYear = a.Key.Q + 1
        });
1 голос
/ 24 августа 2011
var QuarterBreakdown =
    from date in Events
    group date by date.Year * 4 + (date.Month - 1) / 3 into quarters
    select new QuarterInfo
    {
        Events = quarters,
        Year = quarters.Key / 4,
        QuarterOfYear = quarters.Key % 4 + 1
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...