W NHibernate użycie Disjunction daje podwójne wyniki

Usiłuję zrobić zaznaczenie za pomocą Wolnostojącego obiektu, chcę dodać kilka warunków oddzielonych przez OR w czasie wykonywania.

Jeśli używam:

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

Dostaję wynik, którego chcę.

Ale jeśli używam takiego Rozłączenia w ten sposób:

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

I mam elementy, które dla nich są prawdą cond1 i cond2, w wynikach otrzymuję je dwa razy (ta sama dokładna jednostka jest zwracana dwa razy w wyniku listy).

Nie chcę używać QueryOver, ponieważ próbuję osiągnąć coś, co jest trudne do wykonania z QueryOver (końcowym rezultatem tego, co próbuję zrobić, jest uzyskanie zapytania sql z json filtrów).

Co powoduje, że rozłączenie zwraca podwójne? Czy istnieje sposób na dodanie ODLEGŁOŚCI na końcu? Czy robię to źle i nie powinienem używać rozłączenia dla różnych warunków na tej samej tabeli?

AKTUALIZACJA:

Dla części DISTINCT:

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

lub

Projections.Distinct(Projections.Id())

Prawdziwe rozwiązanie jest takie, jak stwierdzono wRadim Köhler - Prawidłowe użycie zapytania podrzędnego.

questionAnswers(1)

yourAnswerToTheQuestion