Hallo zusammen,
ich möchte in NHibernate mit ICriteria eine Sortierung mit Kriterien setzen.
Hier mal ein Beisiel einer Veranschauligung in SQL:
Code:
SELECT * FROM TestMedium WHERE Container_id = 1 AND Id IN(
SELECT Id FROM TestMedium WHERE ExpirationByInterval = 1 AND DueDate <= GETDATE()
) OR ID IN(
SELECT Id FROM TestMedium WHERE ExpirationByInterval = 0 AND (MaximumDays-OperationDays) <= 0
) ORDER BY
CASE WHEN TestMedium.ExpirationByInterval = 1 THEN DueDate ELSE (MaximumDays-OperationDays) END ASC
Dort selektiere ich alle "TestMedium" die die o.g. Kriterien erfüllen. Ich möchte die Ergebnisse so sortieren, dass wenn die Spalte "ExpirationByInterval" auf True ist, als Sortierkriterium die Spalte "DueDate" verwendet wird. Im anderen Fall eben "MaximumDays-OperationDays". OperationDays und MaximumDays sind vom Typ Int32 und DueDate ist vom Typ DateTime. Das o.g. SQL-Beispiel funktioniert einwandfrei.
Nachfolgend die Implentierung für ICriteria:
Code:
crit.AddOrder(Order.Asc(
Projections.Conditional(
Restrictions.Eq("ExpirationByInterval", true), Projections.Constant("DueDate"), Projections.Constant("(MaximumDays-OperationDays)"))
));
Ich habe das o.g. Beispiel getestet, leider funktioniert die Sortierung aber nicht. AUch habe ich die Typen für die Spalten mit angegeben, also z.B. "Projections.Constant("DueDate", NHibernateUtils.DateTime)" und natürlich auch für den zweiten Wert. In diesem Fall wirft er jedesmal eine Exception mit der Meldung, dass die Umwandlung ungültig sei. Ohne den Typen funktioniert es zwar, aber es gibt eine inkorrekte Sortierung. Ich vermute mal, dass man mit diesem Constant nur Werte setzen kann, oder? WEnn ja, wie kann ich es anders machen. Jemand eine Idee für mich?
Vielen Dank schonmal!
Gruß
TrAx1988