I am trying to write this particular sql query in nHibernate QueryOver, which I am not very familiar with:
SELECT MessageThreadId FROM MessageThreadAccesses WHERE ProfileId IN (arr) GROUP BY MessageThreadId HAVING COUNT(MessageThreadId) = arr.Count
where arr is an array of integers (user IDs) that I pass as an argument, and the MessageThreadAccess object looks like this:
public virtual MessageThread MessageThread { get; set; } public virtual Profile Profile { get; set; } ....
After reading several threads and experiments, I got this far with my request (trying to get a MessageThread object - it should always be only one or none), but it still doesn't work, and I'm not quite sure what else to try. A request always returns a MessageThreadAccess object, but when reading its MessageThread property, it is always 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();
Can someone point me in the right direction or explain what I'm doing wrong?
Thanks in advance.
c # nhibernate- queryover nhibernate-queryover
Matej
source share