Сортировка сгруппированного запроса в хронологическом порядке в запросе LINQ - PullRequest
2 голосов
/ 11 февраля 2012

Следующий запрос LINQ получает данные за последние 12 месяцев и агрегирует их по месяцам.

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

Какой лучший способ добиться этого?

public IEnumerable<EventMonthlySummaryMonthly> GetLastYearEventGrid()
        {

            DateTime currentDate = DateTime.Now.AddYears(-1).AddMilliseconds(1);

            var summary = from p in db.Events
                          where (p.StartDate > currentDate) && (p.StartDate != null)
                          let k = new
                          {
                              Month = p.StartDate.Month
                          }
                          group p by k into t
                          select new EventMonthlySummaryMonthly
                          {
                              Month = t.Key.Month,
                              EventsWhatsOn = t.Count(p => p.EventTypeId == 1),
                              EventsRegular = t.Count(p => p.EventTypeId == 2),
                              EventsExhibitions = t.Count(p => p.EventTypeId == 3),
                              EventsAll = t.Count(p => p.EventTypeId != null),
                          };

            return summary;
        }

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

Сортировка по максимальной дате из сгруппированного месяца По убыванию. Если диапазон охватывает несколько лет, это даст вам месяцы, которые содержат самые последние даты.

orderby t.Max(p => p.StartDate) descending
select new EventMonthlySummaryMonthly
{
   Month = t.Key.Month,
   EventsWhatsOn = t.Count(p => p.EventTypeId == 1),
   EventsRegular = t.Count(p => p.EventTypeId == 2),
   EventsExhibitions = t.Count(p => p.EventTypeId == 3),
   EventsAll = t.Count(p => p.EventTypeId != null),
}
0 голосов
/ 11 февраля 2012
    public IEnumerable<EventMonthlySummaryMonthly> GetLastYearEventGrid()
    {

        DateTime currentDate = DateTime.Now.AddYears(-1).AddMilliseconds(1);

        var summary = (from p in db.Events
                      where (p.StartDate > currentDate) && (p.StartDate != null)
                      let k = new
                      {
                          Month = p.StartDate.Month
                      }
                      group p by k into t
                      select new EventMonthlySummaryMonthly
                      {
                          Month = t.Key.Month,
                          EventsWhatsOn = t.Count(p => p.EventTypeId == 1),
                          EventsRegular = t.Count(p => p.EventTypeId == 2),
                          EventsExhibitions = t.Count(p => p.EventTypeId == 3),
                          EventsAll = t.Count(p => p.EventTypeId != null),
                      }).OrderByDescending(item=>item.Month);

        return summary;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...