В 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 - Правильное использование подзапроса.