Entity Framework группа по дням в месяц

В общем, ответ на ваш вопрос «да», но ...

  • .equals(...) будет сравнивать только то, что написано для сравнения, не более, не менее.
  • Если класс не переопределяет метод equals, то по умолчанию используется метод equals(Object o) ближайшего родительского класса, который переопределил этот метод.
  • Если родительские классы не предоставили переопределение, то по умолчанию используется метод из конечного родительского класса Object и поэтому вы остаетесь с методом Object#equals(Object o). В API-интерфейсе объекта это то же самое, что и ==; то есть он возвращает true тогда и только тогда, когда обе переменные относятся к одному и тому же объекту, если их ссылки одно и то же. Таким образом, вы будете тестировать на равенство объектов, а не на функциональное равенство.
  • Всегда помните, чтобы переопределить hashCode, если вы переопределите equals, чтобы не «разорвать контракт». Согласно API, результат, возвращаемый методом hashCode() для двух объектов, должен быть таким же, если их методы equals показывают, что они эквивалентны. Обратное не обязательно верно.
2
задан marc_s 15 January 2019 в 18:23
поделиться

1 ответ

Чтобы это работало с EF и SQL, вы можете просто вычислить дату для вычисления числа «периодов» для группировки. По сути, вы конвертируете каждую дату в месяц, смещенное на 16-е число, и добавляете смещение для года:

var result = await db.Orders.Where(o => o.OrderDate > date)
                            .GroupBy(o => o.OrderDate.Month + 12*(o.OrderDate.Year - date.Year) - (o.OrderDate.Day >= 16 ? 0 : 1))
                            .ToListAsync();

Для @stuartd, вот как вернуть период для каждой группы: [113 ]

var resultp = result.Select(r => new {
                  PeriodBegin = new DateTime(date.Year + r.Key / 12 - (r.Key % 12 == 0 ? 1 : 0), r.Key % 12 == 0 ? 12 : r.key % 12, 16),
                  PeriodEnd = new DateTime(date.Year + r.Key / 12, r.Key % 12 + 1, 15),
                  Orders = r.ToList()
              }).ToList();
0
ответ дан NetMage 15 January 2019 в 18:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: