2012-06-05 51 views
1

我有对象A(相应ObjectADTO)与对象B的集合(相应ObjectBDTO)。 如何在ObjectB上使用连接查询所有ObjectA并将它们映射到DTO中? 我真的不想查询数据库中的所有内容。查询DTO与DTO收集NHibernate的

class ObjectA { 
     public string Name { get; set; } 
     public byte[] Garbage { get; set; } 
     public IEnumerable<ObjectB> Collection { get; set; } 
    } 

    class ObjectB { 
     public string Name { get; set; } 
     public byte[] Garbage { get; set; } 
     public ObjectA Parent { get; set; } 
    } 

//映射到=>

class ObjectADTO { 
     public string Name { get; set; } 
     public IEnumerable<ObjectBDTO> Collection { get; set; } 
    } 

    class ObjectBDTO { 
     public string Name { get; set; } 
     public ObjectADTO Parent { get; set; } 
    } 

回答

0

可以做这样的事情:

ObjectB objectBAlias = null; 
var query = _session.QueryOver<ObjectA>() 
.JoinAlias(x=>x.Collection,()=> objectBAlias, JoinType.LeftOuterJoin) 
.List(); 

var list = query.Select(x=>new ObjectADTO 
{ 
    Name=x.Name, 
    Children=x.Collection.Select(c=>new ObjectBDTO {Name=c.Name, Parent=x).ToList() 
}) 
.ToList(); 

没有检查在VS的语法,但你的想法