En NHibernate, usar una Disyunción da dobles resultados.

Estoy intentando hacer una selección con DetachedCriteria, quiero agregar varias condiciones separadas por OR en el tiempo de ejecución.

Si uso:

Restrictions.Or( cond1, Restrictions.Or(cond2, Restrictions.Or(cond3, cond4)) )

Obtengo el resultado que quiero.

Pero si uso una Disyunción como esta:

var disjunction = Restrictions.Disjunction();
disjunction.Add(cond1);
disjunction.Add(cond2);
disjunction.Add(cond3);
disjunction.Add(cond4);

Y tengo entidades que cond1 y cond2 son verdaderas para ellos, en los resultados los obtengo dos veces (la misma entidad exacta se devuelve dos veces en el resultado de la lista).

No deseo usar QueryOver porque estoy tratando de lograr algo que es difícil de hacer con QueryOver (el resultado final de lo que estoy tratando de hacer es obtener una consulta de SQL de un json de filtros).

¿Qué está causando que la disyunción regrese a los dobles? ¿Hay alguna manera de agregar un DISTINTO al final? ¿Lo estoy haciendo mal y no debería usar disyunción para diferentes condiciones en la misma mesa?

ACTUALIZAR:

Para la parte DISTINTA:

criteria.SetResultTransformer(new NHibernate.Transform.DistinctRootEntityResultTransformer());

o

Projections.Distinct(Projections.Id())

La solución real es como se indica porRadim Köhler - El uso correcto de una sub consulta.

Respuestas a la pregunta(1)

Su respuesta a la pregunta