2010-04-28 7 views
0

J'essaie d'obtenir une liste des parents dans lesquels la collection enfant ne contient pas d'élément d'un type spécifique. L'équivalent LINQ serait quelque chose comme:Recherche de parents où la collection enfant ne contient pas d'élément avec une valeur de propriété spécifique

dataset.Where(x => x.Items.FirstOrDefault(y => y.Type.Code == "ABC") == null) 

Le modèle objet est parent> enfant (articles)> Type> Code de

Si Parent est ma racine globale, comment pourrais-je modéliser ce dans les critères NHibernate/requête ? Voici ma première tentative:

var results = session.CreateCriteria<Parent>() 
    .CreateCriteria("Items") 
    .CreateCriteria("Type") 
    .Add(Restrictions.Not(Restrictions.Eq("Code", "ABC"))) 
    .SetResultTransformer(Transformers.DistinctRootEntity) 
    .List<Parent>(); 

Cela ne semble pas renvoyer les bonnes entités - il retourne simplement tous.

Répondre

0

Il est plus facile de le faire avec HQL qu'avec critères:

from Parent 
where id not in 
     (select p.Id 
     from Parent p 
     join p.Items item 
     where item.Type.Code = 'ABC') 

Vous obtiendrez le résultat que vous attendiez, et sans la nécessité d'DistinctRootEntity.

Questions connexes