c# - NHibernate QueryOver group by 不选择按列分组

标签 c# nhibernate queryover

有如下查询:

var subquery = SessionFactory.GetCurrentSession()
    .QueryOver<SomeEntity>()
    .Where(_ => _.SomeOtherEntity.Id == someId)
    .SelectList(list => list
        .SelectGroup(x => x.SomeGroupByProperty)
        .SelectMax(x => x.MaxPerGroupProperty))
    .List<dynamic>();

生成的 sql 正在选择 SomeGroupByPropertyMaxPerGroupProperty 的最大值。是否有可能让它在 SomeGroupByProperty 上分组,但只选择最大的 MaxPerGroupProperty?这是为了使用包含在父查询中的子查询结果。

最佳答案

这是 NHibernate jira(标准查询)中的一个开放问题:https://nhibernate.jira.com/browse/NH-1426

你也可以这样做

var subquery =
    QueryOver.Of<SomeEntity>()
        .Where(_ => _.SomeOtherEntity.Id == someId)
        .Select(
            Projections.ProjectionList()
                .Add(Projections.SqlGroupProjection("max(MaxPerGroupProperty) as maxAlias", "SomeGroupByProperty",
                    new string[] { "maxAlias" }, new IType[] { NHibernate.NHibernateUtil.Int32 })));

var parentQuery = session.QueryOver<SomeEntity2>()
    .WithSubquery.WhereProperty(x => x.MaxPerGroupPropertyReference).In(subquery).List();

不如使用实体属性那么漂亮,但它确实有效。

关于c# - NHibernate QueryOver group by 不选择按列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30913037/

相关文章:

nhibernate - 如何使用 NHibernate 表示加入分组子查询?

entity-framework - 为什么身份生成器会破坏 nHibernate 中的工作单元?那么EF呢?

NHibernate:将子查询(使用聚合)与表连接

c# - 如何使用 nHibernate 和 QueryOver API 获得不同的结果?

c# - QueryOver - 向 Join 添加附加条件

c# - Unity3D,如何为运算符编写扩展方法?

c# - 从 html 节点返回 null

c# - 使用文件上传更新面板

c# - Selenium WebDriver 测试登录验证/身份验证

c# - Select N+1的NHibernate QueryOver解决方案