2010-04-28 9 views

Respuesta

15

Solo crearía un alias para la colección y agregaría restricciones.

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

Esto daría lugar a

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

El transformador entidad raíz distinta procesará el conjunto de resultados y eliminar la duplicación de los padres. Sin embargo, todavía se encuentran con el cable.

0

Lo que hice fue crear una consulta de criterios para el tipo de matriz, utilice el retorno para crear una consulta criterios para el tipo de niño, y luego agregar las condiciones específicas de la sub consulta de tipo infantil.

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 variable NHibernateSession es del tipo ISession.

Cuestiones relacionadas