Frage

Lassen Sie uns sagen, ich habe viele-zu-viele-Beziehung (mit dem Active hasAndBelongsToMany Attribut) zwischen Post und Schlagworte (Domain Objektnamen, die Unschuldigen zu schützen geändert), und ich wollte

FindAllPostByTags(IList<Tag> tags)
eine Methode wie

, die alle Beiträge zurück das haben alle (nicht nur einige) der Variablen in den Parameter. Jede Art und Weise ich dies entweder mit NHibernate Ausdrücke oder HQL erreichen könnte? Ich habe durch die HQL-Dokumentation gesucht und kann nichts finden, dass meine Bedürfnisse. Ich hoffe, ich bin nur fehlt etwas offensichtlich!

War es hilfreich?

Lösung

Sie können auch nur eine IN Anweisung

DetachedCriteria query = DetachedCriteria.For<Post>();
query.CreateCriteria("Post").Add(Expression.In("TagName",  string.Join(",",tags.ToArray()) );

Ich habe nicht kompiliert, dass so könnte es Fehler haben

Andere Tipps

ich ein System zur Hand mit einem Schloss nicht gerade jetzt installieren, so dass ich nicht testen oder diese kompilieren, aber der Code unten sollte über das tun, was Sie wollen.

Junction c = Expression.Conjunction();
foreach(Tag t in tags)
    c = c.Add( Expression.Eq("Tag", t);

return sess.CreateCriteria(typeof(Post)).Add(c).List();

Ich hatte gerade das gleiche Problem und versuchte, die HQL-Dokumentation zu lesen, aber einige der Features, scheinen nicht in NHibernate (mit-Schlüsselwort zum Beispiel) umgesetzt werden

beenden ich mit dieser Art von Lösung:

select p 
FROM Post p
JOIN p.Tags tag1
JOIN p.Tags tag2
WHERE
    tag1.Id = 1
    tag2.Id = 2

Bedeutung, dynamisch die HQL bauen für jeden Tag verwenden beitreten, dann treffen Sie die Auswahl in Ihrer WHERE-Klausel. Das funktionierte für mich. Ich habe versucht, das Gleiche mit einem DetachedCriteria zu tun, sondern lief in Schwierigkeiten bei dem Versuch, dem Tisch mehrmals zu verbinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top