我将在此之前加上NHibernate远离我的舒适区这一事实,所以这可能比我实现它要简单得多。
我有一个users
表和events
表映射到user
和event
个对象。
我的event
个对象引用单个user
对象。
我有一个属性,我在user
对象上持有 LastActivityTimeStamp 。
我的event
对象的属性与 EventType 和成功相关。
要确定“在线”用户列表,我需要收集所有用户对象,其中 LastActivityTimeStamp 大于之前计算的cutoff
值,其最后一项活动在{ {1}}表不是一个成功的“注销”事件类型。
我该如何写这个标准?
答案 0 :(得分:1)
尝试调整此
var subquery = DetachedCriteria.For<Event>()
.Add(Restrictions.Eq("Success", true))
.Add(Restrictions.EqProperty("User.Id", "u.id"))
.AddOrder(Order.Desc("TimeStamp"))
.SetProjection(Projections.Property("EventType"))
.SetMaxResults(1);
session.CreateCriteria<User>("u")
.Add(Restrictions.Ge("LastActivityTimeStamp", cutoff))
.Add(Subqueries.Ne(EventType.LogOff, subquery));