You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用NHibernate QueryOver实现分组后筛选Count>1的查询?

实现分组后筛选聚合结果的NHibernate QueryOver写法

对应你给出的SQL(分组后筛选count(id) > 1的结果),需要在QueryOver中使用Having子句来过滤聚合后的结果(Where用于分组前过滤原始数据,Having才是分组后过滤聚合值)。

修改后的完整代码如下:

MyTable alias = null;
Output dto = null;

var groupBy = await s.QueryOver<MyTable>(() => alias)
    .Select(
        Projections.ProjectionList()
            .Add(Projections.Group<MyTable>(p => p.Name).WithAlias(() => dto.Name))
            .Add(Projections.Count(() => alias.Id).WithAlias(() => dto.Count))
    )
    // 添加Having条件,过滤count(Id) > 1的分组
    .Having(Restrictions.Gt(Projections.Count(() => alias.Id), 1))
    .TransformUsing(NHibernate.Transform.Transformers.AliasToBean<Output>())
    .ListAsync<Output>();

关键说明:

  • .Having()方法专门用于分组后的聚合条件过滤,对应SQL中的HAVING子句;
  • 直接通过Projections.Count(() => alias.Id)引用聚合函数,和Select中的统计逻辑保持一致;
  • 若需要更简洁,也可给Count投影设置别名后通过别名引用,但直接使用投影表达式更直观。

内容的提问来源于stack exchange,提问作者Peter Larsen 'CPH'

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:14:55