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.