将服务类映射到具有属性的两个类到DTO类

时间:2017-07-19 21:56:17

标签: c# asp.net automapper

我有一个服务类列表,里面有两个Class:

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映射到与Child's Class具有相同属性的列表中:

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吗,可以吗? 我搜索了与Child的类映射,将多个类映射到一个类,没有成功。 我尝试用ForAllMembers配置它,但没有工作:

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

我不是AutoMapper的专家,如果有人可以帮助我的话。我很感激。

1 个答案:

答案 0 :(得分: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);