В NHibernate использование дизъюнкции дает двойной результат

Я пытаюсь сделать выбор с DetachedCriteria, я хочу добавить несколько условий, разделенных ИЛИ во время выполнения.

Если я использую:

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

Я получаю результат, который хочу.

Но если я использую дизъюнкцию так:

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

И у меня есть сущности, которые cond1 и cond2 для них верны, по результатам я получаю их дважды (одна и та же точная сущность возвращается дважды в результате списка).

Я не хочу использовать QueryOver, потому что яя пытаюсь сделать что-то, что трудно сделать с QueryOver (конечный результат того, что яя пытаюсь сделать, это получить SQL-запрос из JSON фильтров).

Какие'Вызывает ли дизъюнкция возврат? Есть ли способ добавить DISTINCT в конце? Я делаю это неправильно, и я не долженt использовать дизъюнкцию для разных условий на одной и той же таблице?

ОБНОВИТЬ:

Для ОТЛИЧНОЙ части:

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

или же

Projections.Distinct(Projections.Id())

Реальное решение, как указаноРадим Кёhler - Правильное использование подзапроса.

Ответы на вопрос(1)

Ваш ответ на вопрос