2017-07-19 60 views
0

我有一個服務類清單有兩個類中:映射服務類兩個類別,以DTO類具有性能

public class ParentClass 
{ 
    public ChildClass A { get; set; } 
    public ChildClass2 B { get; set; } 
} 

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

public class ChildClass2 
{ 
    public string Color { get; set; } 
    public string Nick { get; set; } 
} 

而且我想用AutoMapper映射到列表中具有相同的屬性是孩子的班級:

public class DTOClass 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Color { get; set; } 
    public string Nick { get; set; } 
} 

它做工精細:

我的配置:

Mapper.CreateMap<ChildClass, DTOClass>(); 
Mapper.CreateMap<ChildClass2, DTOClass>(); 

我的代碼:

List<ParentClass> listParentClass = getListParentClass(); 
List<DTOClass> listDtoClass = new List<DTOClass>(); 
ParentClass dtoClass = new ParentClass(); 

foreach (var parentClass in listParentClass) 
{ 
    dtoClass = AutoMapper.Mapper.Map<ChildClass, DTOClass >(parentClass.A); 
    AutoMapper.Mapper.Map<ChildClass2, DTOClass >(parentClass.B, dtoClass); 

    listDtoClass.Add(dtoClass); 
} 

我想刪除的foreach,可以嗎? 我搜索了與子類的映射,將多個類映射到一個類,但沒有成功。 我試圖configurate它ForAllMembers,但不工作:

Mapper.CreateMap<ParentClass, DTOClass>() 
.ForAllMembers(op => op.MapFrom(s => Mapper.Map<ChildClass, DTOClass>(s.A))); 

我不especialist到AutoMapper,如果sameone能幫助我。我將不勝感激。

回答

1

你可以這樣做:

public class ParentClass 
    { 
     public ChildClass A { get; set; } 
     public ChildClass2 B { get; set; } 
    } 

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

    public class ChildClass2 
    { 
     public string Color { get; set; } 
     public string Nick { get; set; } 
    } 

    public class DTOClass 
    { 
     public int AId { get; set; } 
     public string AName { get; set; } 
     public string BColor { get; set; } 
     public string BNick { get; set; } 
    } 

您的映射:

cfg.CreateMap<ChildClass, DTOClass>(); 
    cfg.CreateMap<ChildClass2, DTOClass>(); 
    cfg.CreateMap<ParentClass, DTOClass>(); 

你舉的例子:

List<ParentClass> listParentClass = getListParentClass(); 
    //List<DTOClass> listDtoClass = new List<DTOClass>(); 
    var listDtoClass = AutoMapper.Mapper.Map<List<DTOClass>>(listParentClass);