NHibernate QueryOver组没有选择按列分组

Răz*_*nda 5 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>();
Run Code Online (Sandbox Code Playgroud)

生成的sql正在选择两者SomeGroupByProperty和最大值MaxPerGroupProperty.是否可以将其分组,SomeGroupByProperty但只选择最大值MaxPerGroupProperty?这是为了将子查询结果与父查询中的包含一起使用.

Bun*_*ity 5

这是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();
Run Code Online (Sandbox Code Playgroud)

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

  • NH-1426 - 近十年后仍未修复/愤世嫉俗;-) (2认同)