我在使用NHibernate和一个简单的GROUP BY表达式时遇到困难。
我有一张记录用户活动记录的表。我需要为每个用户返回最新的活动行,并按时间降序排序,该行还对应于降序ID(自动递增)。
基本上,这是我要运行的SQL:
SELECT * FROM log_user_activity GROUP BY UserID DESC
我在SO中搜索了类似的问题,并获得了一系列有关投影,子查询,DTO的答案。
是否有任何简单的方法可以完成,而无需定义新的DTO类,或使用带有匿名对象的投影,而我必须再次手动指定所有列?使用QueryOver语法的解决方案会更好,但不是强制性的。
是否有任何简单的方法可以完成,而无需定义新的DTO类,或使用带有匿名对象的投影,而我必须再次手动指定所有列?
不,没有其他方法,然后:
.List<object[]>()
...)但是我们可以做的是从16.8中获利。子查询和返回只是映射对象的列表,它们是,这些与最大滤波Time
特性:
ActivityLog activity = null;
// subquery to be later used for EXISTS
var maxSubquery = QueryOver.Of<ActivityLog>()
.SelectList(l => l
.SelectGroup(item => item.UserID)
.SelectMax(item => item.Time)
)
// WHERE Clause
.Where(x => x.UserID == activity.UserID )
// HAVING Clause
.Where(Restrictions.EqProperty(
Projections.Max<ActivityLog>(item => item.Time),
Projections.Property(() => activity.Time)
));
// final query without any transformations/projections... but filtered
var result = session.QueryOver<ActivityLog>(() => activity)
.WithSubquery
.WhereExists(maxSubquery)
.List<ActivityLog>()
;
还要检查以下内容:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句