C# 内部联接中GroupBy的Nhibernate查询覆盖表示

C# 内部联接中GroupBy的Nhibernate查询覆盖表示,c#,nhibernate,fluent-nhibernate,queryover,C#,Nhibernate,Fluent Nhibernate,Queryover,所以我是来自英孚的Nhibernate新手。在尝试了查询之后,由于缺少支持的函数和无意义的sql,我对它的印象非常淡薄,所以我尝试了QueryOver,但没有走多远。有人能帮我找到这个SQL的QueryOver表示吗 select p2.* from PurchaseOrders p2 inner join (SELECT po.PurchaseOrderID, MAX(POS.StatusDate) as LastUpdate FROM PurchaseOrders Po

所以我是来自英孚的Nhibernate新手。在尝试了查询之后,由于缺少支持的函数和无意义的sql,我对它的印象非常淡薄,所以我尝试了QueryOver,但没有走多远。有人能帮我找到这个SQL的QueryOver表示吗

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

当前的解决方案看起来是这样的,但需要进一步的工作:

 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>();
int supplierId=20;
Status.StatusesEnum Status=Status.StatusesEnum.Complete;
PurchaseOrder orderAlias=null;
IList命令=
Session.QueryOver(()=>orderAlias).WithSubquery
.存在于何处(查询日期:)
.Where(c=>c.PurchaseOrder.Id==orderAlias.Id)
.OrderBy(c=>c.StatusDate)
.描述
.Select(c=>c.Status.Id==(int)Status)
.采取(1)
//.Having status=statusID
)
.其中(o=>o.Supplier.Id==supplierId)
.List();

您将无法使用类似于AFAIK QueryOver中的表表达式进行联接。感谢您的评论。我已经把我目前的解决方案(在玩了很多游戏之后)放在下面了。它不完全符合这个问题,但有一个类似的结果,如果你能想到一个改进,让我知道。