No NHibernate, usar uma disjunção dá resultados duplos
Eu estou tentando fazer um select com DetachedCriteria, eu quero adicionar várias condições separadas por OR em tempo de execução.
Se eu usar:
Restrictions.Or( cond1, Restrictions.Or(cond2, Restrictions.Or(cond3, cond4)) )
Eu obtenho o resultado que quero.
Mas se eu usar uma disjunção assim:
var disjunction = Restrictions.Disjunction();
disjunction.Add(cond1);
disjunction.Add(cond2);
disjunction.Add(cond3);
disjunction.Add(cond4);
E eu tenho entidades que cond1 e cond2 são verdadeiras para eles, nos resultados eu recebo duas vezes (a mesma entidade exata é retornada duas vezes no resultado da lista).
Eu não quero usar o QueryOver porque estou tentando realizar algo que é difícil de fazer com o QueryOver (o resultado final do que estou tentando fazer é obter uma consulta sql de um json de filtros).
O que está causando a disjunção para retornar duplas? Existe uma maneira de adicionar um DISTINCT no final? Estou fazendo errado e não devo usar disjunção para condições diferentes na mesma mesa?
ATUALIZAR:
Para a parte DISTINCT:
criteria.SetResultTransformer(new NHibernate.Transform.DistinctRootEntityResultTransformer());
ou
Projections.Distinct(Projections.Id())
A solução real é como afirmado porRadim Köhler - O uso correto de uma subconsulta.