【问题标题】:Nhibernate QueryOver Representation of GroupBy in an inner join内部连接中 GroupBy 的 Nhibernate QueryOver 表示
【发布时间】:2012-07-10 11:32:58
【问题描述】:

所以我是来自 EF 的 Nhibernate 新手。在尝试了 Query 并因缺乏受支持的函数和无意义的 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

【问题讨论】:

  • 您将无法加入像 QueryOver、AFAIK 中那样的表表达式。
  • 感谢您的评论。我已经把我当前的解决方案(经过大量播放)放在下面。它并没有完全按照这个查询,但有类似的结果,如果你能想到改进,请告诉我。

标签: c# nhibernate fluent-nhibernate queryover


【解决方案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>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多