In NHibernate führt die Verwendung einer Disjunktion zu doppelten Ergebnissen
Ich versuche, mit DetachedCriteria eine Auswahl zu treffen. Ich möchte zur Laufzeit mehrere durch OR getrennte Bedingungen hinzufügen.
Wenn ich benutze:
Restrictions.Or( cond1, Restrictions.Or(cond2, Restrictions.Or(cond3, cond4)) )
Ich bekomme das Ergebnis, das ich will.
Aber wenn ich so eine Disjunktion benutze:
var disjunction = Restrictions.Disjunction();
disjunction.Add(cond1);
disjunction.Add(cond2);
disjunction.Add(cond3);
disjunction.Add(cond4);
Und ich habe Entitäten, die cond1 und cond2 für sie wahr sind, bei den Ergebnissen erhalte ich sie zweimal (die gleiche exakte Entität wird zweimal im Listenergebnis zurückgegeben).
Ich möchte QueryOver nicht verwenden, weil ich versuche, etwas zu erreichen, das mit QueryOver schwer zu erreichen ist (das Endergebnis meiner Versuche besteht darin, eine SQL-Abfrage von einem JSON-Filter zu erhalten).
Was bewirkt, dass die Disjunktion das Doppelte zurückgibt? Gibt es eine Möglichkeit, am Ende ein DISTINCT hinzuzufügen? Mache ich es falsch und sollte ich Disjunktion nicht für verschiedene Bedingungen am selben Tisch verwenden?
AKTUALISIEREN:
Für den DISTINCT-Teil:
criteria.SetResultTransformer(new NHibernate.Transform.DistinctRootEntityResultTransformer());
oder
Projections.Distinct(Projections.Id())
Die wirkliche Lösung ist wie von angegebenRadim Köhler - Die korrekte Verwendung einer Unterabfrage.