2010-04-28 8 views

risposta

15

Vorrei solo creare un alias per la raccolta e aggiungere restrizioni.

var parentsWithKidName = session.CreateCriteria<Parent>() 
    .CreateAlias("Children", "c", JoinType.InnerJoin) 
    .Add(Restrictions.Eq("c.Name", childName)) 
    .SetResultTransformer(Transformers.DistinctRootEntity()) 
    .List<Parent>(); 

Questo comporterebbe

select p.* 
from parent p 
inner join child c on /* however it's mapped? */ 
where c.Name = ? 

Il distinto trasformatore entità radice processerà il risultato impostare e rimuovere genitori duplicati. Si incontrano ancora attraverso il filo però.

0

Quello che ho fatto è stato quello di creare una query criteri per il tipo di genitore, utilizzare il ritorno per creare una query criteri per il tipo di bambino, e quindi aggiungere le condizioni specifiche per la query sub tipo di bambino.

public virtual IList<T> GetByChildCriteria(string childName, 
    params ICriterion[] criterion) 
{ 
    ICriteria criteria = NHibernateSession 
    .CreateCriteria(persitentType) 
    .CreateCriteria(childName); 
    foreach (ICriterion criterium in criterion) 
    { 
     criteria.Add(criterium); 
    } 
    return criteria.List<T>(); 
} 

Nota: la variabile NHibernateSession è di tipo ISession.

Problemi correlati