我有一個供應商。每個供應商都有幾個預訂,其中有一個預訂日期。選擇MAX()加入NHibernate
我想要一個供應商列表而不是今天進行了預訂。
在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的:供應商「
你得到的錯誤是什麼? – 2010-06-04 19:01:23
您使用Criteria而不是HQL的任何特定原因? – 2010-06-04 19:11:28
@Jon,我編輯了這個問題。 @Mauricio,不是真的。我沒有使用HQL,所以我只是用我所知道的(略好一點)。 – 2010-06-04 19:17:32