У меня есть продавец. Каждый поставщик имеет несколько резервирований, с указанием даты резервирования.
Я хочу список поставщиков, которые не сделали заказ еще сегодня.
В SQL я бы сделал что-то вроде этого:
SELECT v.Id, MAX(r.ReservationDate) AS MaxDate FROM Vendor v
INNER JOIN DailyReservation r ON v.Id = r.Vendor_Id
GROUP BY v.Id
HAVING MAX(r.ReservationDate) <> '2010-06-04'
Я пытаюсь сделать это в NHibernate так:
session.CreateCriteria<Vendor>()
.CreateAlias("Reservations", "r")
.SetProjection(Projections.Alias(Projections.Max("r.ReservationDate"), "MaxDate"))
.Add(Restrictions.Not(Restrictions.Eq("MaxDate", DateTime.Today)))
.List<Vendor>();
Это явно не работает. Что я делаю не так?
РЕДАКТИРОВАТЬ! Я поиграл еще немного, и дошел до этой точки, которая работает лучше:
var c = Session.CreateCriteria<Vendor>();
c.CreateAlias("Reservations", "r");
ProjectionList projections = Projections.ProjectionList();
projections.Add(Projections.Max("r.ReservationDate"), "MaxDate");
projections.Add(Projections.GroupProperty("Id"));
c.SetProjection(projections);
c.Add(Restrictions.Not(Restrictions.Eq("MaxDate", DateTime.Today)));
return c.List<Vendor>();
И чтобы ответить на комментарий, я получаю сообщение об ошибке «NHibernate.QueryException: не удалось разрешить свойство: MaxDate of: Vendor»