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