Критерии NHibernate оставили путаницу против присоединения / подзапроса - PullRequest
1 голос
/ 09 ноября 2011

Я предрежу это тем фактом, что NHibernate находится далеко за пределами моей зоны комфорта, так что это может быть намного проще, чем я это делаю.

У меня есть таблица users и таблица events, сопоставленные с объектами user и event.

Мои event объекты ссылаются на отдельный user объект.

У меня есть свойство, которое сохраняется в моем user объекте для LastActivityTimeStamp .

У меня есть свойства моего event объекта, связанного с EventType и Success .

Чтобы определить список пользователей, которые «в сети», мне нужно собрать все пользовательские объекты с LastActivityTimeStamp больше, чем ранее вычисленное значение cutoff, последнее действие которого в таблице events не был успешным типом события «Выход из системы».

Как бы я написал этот критерий?

1 Ответ

1 голос
/ 10 ноября 2011

попробуйте настроить это

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));
...