2 Stimmen

Ist es möglich, ICriteria/ICriterion von LINQ oder HQL aus zu erstellen?

Ich erstelle eine Methode, die einen Filter erstellen kann, der von NHibernate verstanden wird (mit Filter meine ich zum Beispiel eine Reihe von ICriteria-Objekten), aus meinem abstrakten Filterobjekt.

public static IEnumerable ToNhCriteria(this MyCriteria criteria)
{
   // Von T4 generierte Funktion
   // Viele result.Add(Expression.Or(Expression.Eq(),Expression.Eq)) Expression Trees - schwer zu generieren
   // Gibt es eine Möglichkeit, hier HQL/Linq-Abfrage zu generieren?
}

dann möchte ich etwas wie

session.CreateCriteria().Add(myCriteria.ToNhCriteria())

verwenden, um Entitäten zu filtern. Das Problem ist, dass die Verwendung von Expression-Methoden (Expression.Or usw.) ziemlich mühsam ist (die Methode wird generiert und ich habe mehrere ODER-Anweisungen, die irgendwie zu einem Ausdruck verbunden werden müssen). Gibt es einen Weg, um Expression.Or() zu vermeiden und ICrietrion / ICriteria mit LINQ oder HQL zu erstellen?

1voto

ZeroBugBounce Punkte 3602

Hey, hast du diese diese Frage angeschaut? Sie zeigt, wie man von Linq zu NHibernate zu einem MultiCriteria geht (und dabei einen Linq-Query in ein ICriteria transformiert).

0voto

Paco Punkte 8264

Nein, das ist nicht möglich. Warum verwendest du nicht Linq anstelle von Kriterien?

0voto

adrin Punkte 3678

Linq ist nicht die beste Lösung, es sei denn, man möchte Filterung auf der Sammlungsseite und nicht auf der Datenbankseite mit WHERE-Klauseln durchführen. Ayende schlägt vor, dass die ICriteria-API gut für die dynamische Filtererstellung geeignet ist. Das Problem, das ich mit mehreren ORs hatte, wurde durch die Verwendung von Restrictions.Disjunction() angegangen... das hat vieles vereinfacht. Zur Zeit, als ich die Frage gestellt habe, war mir einfach nicht bewusst, dass solche Dinge in NHibernate existieren :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X