Cláusulas GROUP BY e HAVING no nHibernate QueryOver
Estou tentando escrever esta consulta SQL específica na linguagem nHibernate QueryOver, com a qual não estou muito familiarizado:
SELECT MessageThreadId FROM MessageThreadAccesses
WHERE ProfileId IN (arr)
GROUP BY MessageThreadId
HAVING COUNT(MessageThreadId) = arr.Count
Onde arr é uma matriz de inteiros (IDs de usuário) Eu estou passando como argumento e entidade MessageThreadAccess se parece com isso:
public virtual MessageThread MessageThread { get; set; }
public virtual Profile Profile { get; set; }
....
Depois de ler vários encadeamentos de estouro de pilha e experimentar, cheguei até aqui com minha consulta (tentando obter o objeto MessageThread - deve ser sempre apenas um ou nenhum), mas ainda não funciona e não tenho certeza do que mais tentar . A consulta sempre parece estar retornando o objeto MessageThreadAccess, mas ao ler sua propriedade MessageThread é sempre 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();
Alguém pode me indicar a direção certa ou explicar o que estou fazendo de errado?
Desde já, obrigado.