编程语言
首页 > 编程语言> > c# – NHibernate QueryOver分组而不选择按列分组

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正在选择SomeGroupByProperty和MaxPerGroupProperty的最大值.是否可以让它在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,nhibernate-queryover
来源: https://codeday.me/bug/20190519/1137304.html