Nhibernate QueryOver Представление GroupBy во внутреннем объединении
Так что я новичок в Nhibernate, пришедший из EF. После того, как я попробовал Query<> и испытал сильное потрясение из-за отсутствия поддерживаемых функций и бессмысленного sql, я пробовал QueryOver, но далеко не ушел. Может кто-нибудь помочь мне с представлением QueryOver этого SQL?
select p2.* from
PurchaseOrders p2 inner join
(SELECT po.PurchaseOrderID, MAX(POS.StatusDate) as LastUpdate FROM PurchaseOrders Po
inner join PurchaseOrderStatuses POS on PO.PurchaseOrderID = pos.PurchaseOrderID
where pos.StatusID = :@status and po.SupplierID = :@supplierId
group by po.PurchaseOrderID) p1
on p2.PurchaseOrderID = p1.PurchaseOrderID
1 ответ
Текущее решение выглядит следующим образом, но требует дальнейшей работы:
int supplierId = 20;
Status.StatusesEnum status = Status.StatusesEnum.Complete;
PurchaseOrder orderAlias = null;
IList<PurchaseOrder> orders =
Session.QueryOver<PurchaseOrder>(() => orderAlias).WithSubquery
.WhereExists(QueryOver.Of<PurchaseOrderStatus>()
.Where(c => c.PurchaseOrder.Id == orderAlias.Id)
.OrderBy(c=>c.StatusDate)
.Desc
.Select(c=>c.Status.Id == (int)status)
.Take(1)
//.Having status = statusID
)
.Where(o=>o.Supplier.Id == supplierId)
.List<PurchaseOrder>();