Vra

Kom ons sê ek het baie-baie-verhouding (met behulp van die ActiveRecord skryf HasAndBelongsToMany) tussen Pos- en Tags (domein name voorwerp verander na die onskuldige te beskerm), en ek wou 'n metode soos

FindAllPostByTags(IList<Tag> tags)
dat alle plasings terug dat almal (nie net 'n paar van) die Tags in die parameter. Enige manier wat ek dit óf kan bereik met NHibernate Expressions of HQL? Ek het deur die HQL dokumentasie gesoek en kon niks wat geskik my behoeftes te vind. Ek hoop ek net mis iets voor die hand liggend!

Was dit nuttig?

Oplossing

Jy kan ook net gebruik 'n IN verklaring

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

Ek het nie saamgestel dat so kan dit foute het

Ander wenke

Ek het nie 'n stelsel aan die hand met 'n Castle installeer op die oomblik, so ek het nie te toets of saam te stel, maar die kode hieronder moet oor doen wat jy wil.

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

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

Ek het nou net dieselfde probleem gehad en het probeer om die HQL-dokumentasie te lees, maar 'n paar van die eienskappe lyk nie in NHibernate geïmplementeer moet word (met navraag byvoorbeeld)

Ek het uiteindelik met hierdie soort van oplossing:

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

Betekenis, dinamiese bou die HQL behulp aansluit vir elke tag, maak dan die keuse in jou WAAR klousule. Dit het gewerk vir my. Ek het probeer om dieselfde te doen met 'n DetachedCriteria maar gehardloop in die moeilikheid wanneer ek probeer om die tafel te sluit verskeie kere.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top