2015-11-20 2 views
4

J'ai deux classes:Comment obtenir la liste des entités mères avec à chaque enfant dans Nhibernate QueryOver

public class Parent 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public ICollection<Child> Childrens { get; set; } 
    } 

    public class Child 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
    } 

Maintenant, grâce à Nhibernate QueryOver Je veux obtenir la liste de tous les parents sans de dénombrement des enfants seule requête.

sortie attendue est:

ParentId Name ChildrenCount 
1   ABC  10 
2   CDE  5 

quelqu'un peut me aider.

Répondre

4

En utilisant cette DTO pour la projection:

public class ParentDto 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int ChildrenCount { get; set; } 
} 

Utilisez cette requête:

Child childAlias = null; 
ParentDto dto = null; 

var dtoParents = Session.QueryOver<Parent>() 
    .JoinAlias(x => x.Childrens,() => childAlias) 
    .SelectList(list => list 
     .SelectGroup(x => x.Id).WithAlias(() => dto.Id) 
     .SelectGroup(x => x.Name).WithAlias(() => dto.Name) 
     .SelectCount(() => childAlias.Id).WithAlias(() => dto.ChildrenCount)) 
    .TransformUsing(Transformers.AliasToBean<ParentDto>()) 
    .List<ParentDto>(); 

Vous pouvez en savoir plus sur QueryOver projections à l'aide DTO here.

+1

Votre 'Liste()' devrait être 'Liste ()' ne devrait-il pas? –

+1

@Brian Donahue vous avez raison, merci. – Najera