В 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 в конце? Я делаю это неправильно, и я не должен использовать дизъюнкцию для разных условий на одном столе?
ОБНОВИТЬ:
Для ОТЛИЧНОЙ части:
criteria.SetResultTransformer(new NHibernate.Transform.DistinctRootEntityResultTransformer());
или же
Projections.Distinct(Projections.Id())
Реальное решение, как указаноРадим Келер - Правильное использование подзапроса.