有如下查询:
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 group by 不选择按列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30913037/