Предложения GROUP BY и HAVING в nHibernate QueryOver
Я пытаюсь написать этот конкретный SQL-запрос на языке nHibernate QueryOver, с которым я не очень знаком:
SELECT MessageThreadId FROM MessageThreadAccesses
WHERE ProfileId IN (arr)
GROUP BY MessageThreadId
HAVING COUNT(MessageThreadId) = arr.Count
где arr - массив целых чисел (идентификаторов пользователей), которые я передаю в качестве аргумента, а сущность MessageThreadAccess выглядит следующим образом:
public virtual MessageThread MessageThread { get; set; }
public virtual Profile Profile { get; set; }
....
После прочтения нескольких потоков переполнения стека и экспериментирования я зашел так далеко со своим запросом (пытаясь получить объект MessageThread - он всегда должен быть только один или ни одного), но он все равно не работает, и я не совсем уверен, что еще можно попробовать , Кажется, что запрос всегда возвращает объект MessageThreadAccess, но при чтении его свойства MessageThread он всегда равен NULL.
var access = Session.QueryOver<MessageThreadAccess>()
.WhereRestrictionOn(x => x.Profile).IsIn(participants.ToArray())
.Select(Projections.ProjectionList()
.Add(Projections.Group<MessageThreadAccess>(x => x.MessageThread))
)
.Where(
Restrictions.Eq(Projections.Count<MessageThreadAccess>(x => x.MessageThread.Id), participants.Count)
)
.TransformUsing(Transformers.AliasToBean<MessageThreadAccess>())
.SingleOrDefault();
return Session.QueryOver<MessageThread>()
.Where(x => x.Id == access.MessageThread.Id)
.SingleOrDefault();
Может ли кто-нибудь указать мне правильное направление или объяснить, что я делаю неправильно?
Заранее спасибо.