2012-07-10 3 views
1

그래서 EH에서 온 Nhibernate를 처음 사용했습니다. Query <을 시도한 후 지원되는 기능과 무의미한 SQL이 부족하여 많은 부담을 안고 있습니다. QueryOver를 사용해 보았지만 멀지 않았습니다. 누군가가이 SQL의 QueryOver 표현을 도와 줄 수 있습니까?Nhibernate QueryOver 내부 조인의 GroupBy 표현

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 
+0

합니다. –

+0

코멘트 주셔서 감사합니다. 나는 아래에 내 현재 솔루션을 넣어했습니다 (많이 재생 한 후). 그것은 편지에이 쿼리를 따르는 것은 아니지만 비슷한 결과가 있습니다. 개선을 생각할 수 있으면 알려주세요. – Kaido

답변

0

현재 솔루션은 다음과 같습니다하지만 추가 작업이 필요 : 당신은 AFAIK, QueryOver에서 같은 테이블 표현식에 가입 할 수 없습니다

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>(); 
관련 문제