【问题标题】:Return List of MAX Value after group QueryOver Nhibernate组 QueryOver Nhibernate 后返回 MAX 值列表
【发布时间】:2014-09-01 13:46:22
【问题描述】:

请帮忙,我可以通过 nhibernate 查询吗?

select max(Id) from transTable
group by PortfolioId.

我试过了。

 var subquery = QueryOver.Of(() => q)
                       .SelectList(list => list.SelectGroup(() => q.PortfolioId))
                           .Where(Restrictions.EqProperty(
                               Projections.Property(() => p.Id),
                               Projections.Max(() => q.Id)))
                           .And(Restrictions.EqProperty(
                               Projections.Property(() => p.Id),
                               Projections.Property(() => q.Id)));

然后

var filter = QueryOver.Of(() => p)
                        .WithSubquery.WhereExists(subquery)
                        .Select(Projections.Property(()=>p.Id));

但它不起作用。它返回表中的所有数据。我只想从每个用户那里获取最后的序列 ID。

请帮忙。谢谢

【问题讨论】:

    标签: c# .net nhibernate subquery queryover


    【解决方案1】:

    我想说,你快到了。这些是我们应该进行的调整,以获得过滤项目的列表。

    // group by PortfolioId
    // HAVING for outer 'p.ID'
    var subquery = QueryOver.Of(() => q)
        .SelectList(list => list
            .SelectGroup(() => q.PortfolioId)
            .SelectMax(() => q.Id)
        )
        .Where(Restrictions.EqProperty( // HAVING
            Projections.Property(() => p.Id),
            Projections.Max(() => q.Id)))
         ;
    
    // now select the list of p.Id, prefiltered by above subquery
    var filter = QueryOver.Of(() => p)
        .WithSubquery.WhereExists(subquery)
        .Select(Projections.Property(() => p.Id));
    
    // finally the result as a set of q entities
    // ready for paging
    var result = session.QueryOver(() => q)
        .WithSubquery
            .WhereProperty(() => q.Id)
            .In(filter)
        // .Skip(0) -- paging could be used
        // .Take(25)
        .List()
        ;
    

    在这个类似的查询中检查定义的 SQL 的结构:Query on HasMany reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多