有如下查询:
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();
虽然不像使用实体属性那样漂亮,但是它确实可以工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句