Automapper 自动映射-使用不同的属性将一个对象映射到另一个对象

Automapper 自动映射-使用不同的属性将一个对象映射到另一个对象,automapper,Automapper,你能帮我吗。我有一个目标 class Source{ public string A {get;set;} public string B {get;set;} public string C {get;set;} public string D {get;set;} } 和目标对象 class Dest{ public string A1 {get;set;} public string B1 {get;set;} } 是否可以使用Automapp

你能帮我吗。我有一个目标

class Source{
 public string A {get;set;}
 public string B {get;set;}
 public string C {get;set;}
 public string D {get;set;}
}
和目标对象

  class Dest{
     public string A1 {get;set;}
     public string B1 {get;set;}

    }
是否可以使用Automapper从源对象创建Dest对象,但在Dest的第一个实例中将A映射到A1,将B映射到B1,在Dest的第二个实例中将C映射到A1,将D映射到B1

在梦中得到收集的解决方案

比如:

 Mapper.Initialize(cfg =>{
      cfg.CreateMap<Source, Dest>()
        .ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.A))
        .ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.B;))
      cfg.CreateMap<Source, Dest>()
        .ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.C))
        .ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.D))});

新的遍历属性并使用“属性类型”创建对象。

您可以创建两个映射器:

var m1 = new MapperConfiguration(
    cfg =>
    {
        cfg.CreateMap<Source, Dest>()
            .ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.A))
            .ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.B));
    })
    .CreateMapper();

var m2 = new MapperConfiguration(
    cfg =>
    {
        cfg.CreateMap<Source, Dest>()
            .ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.C))
            .ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.D));
    })
    .CreateMapper();
var m1=新的MapperConfiguration(
cfg=>
{
cfg.CreateMap()
.ForMember(dest=>dest.A1,opt=>opt.MapFrom(src=>src.A))
.ForMember(dest=>dest.B1,opt=>opt.MapFrom(src=>src.B));
})
.CreateMapper();
var m2=新的MapperConfiguration(
cfg=>
{
cfg.CreateMap()
.ForMember(dest=>dest.A1,opt=>opt.MapFrom(src=>src.C))
.ForMember(dest=>dest.B1,opt=>opt.MapFrom(src=>src.D));
})
.CreateMapper();
然后在另一个接口(您定义的接口)后面使用它们(例如ISourceMapper),该接口将根据实例的数量在两个映射器之间交替使用(即实例1->mapper 1,实例2->mapper 2,实例3->mapper 1…等)


对于集合部分,您可以轻松调用
IEnumerable。选择
ISourceMapper.Map
方法传递到投影
Func

您可以创建两个映射器:

var m1 = new MapperConfiguration(
    cfg =>
    {
        cfg.CreateMap<Source, Dest>()
            .ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.A))
            .ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.B));
    })
    .CreateMapper();

var m2 = new MapperConfiguration(
    cfg =>
    {
        cfg.CreateMap<Source, Dest>()
            .ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.C))
            .ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.D));
    })
    .CreateMapper();
var m1=新的MapperConfiguration(
cfg=>
{
cfg.CreateMap()
.ForMember(dest=>dest.A1,opt=>opt.MapFrom(src=>src.A))
.ForMember(dest=>dest.B1,opt=>opt.MapFrom(src=>src.B));
})
.CreateMapper();
var m2=新的MapperConfiguration(
cfg=>
{
cfg.CreateMap()
.ForMember(dest=>dest.A1,opt=>opt.MapFrom(src=>src.C))
.ForMember(dest=>dest.B1,opt=>opt.MapFrom(src=>src.D));
})
.CreateMapper();
然后在另一个接口(您定义的接口)后面使用它们(例如ISourceMapper),该接口将根据实例的数量在两个映射器之间交替使用(即实例1->mapper 1,实例2->mapper 2,实例3->mapper 1…等)


对于集合部分,您可以轻松调用
IEnumerable。选择
ISourceMapper.Map
方法传递到投影
Func

您可以在解析器中设置条件(MapFrom或ResolveUsing)。但是我如何使用它呢?我仍然无法获取映射。您可以在您的冲突解决程序(MapFrom或ResolveUsing)中设置一个条件。但我如何使用它?我还是拿不到地图。
var m1 = new MapperConfiguration(
    cfg =>
    {
        cfg.CreateMap<Source, Dest>()
            .ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.A))
            .ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.B));
    })
    .CreateMapper();

var m2 = new MapperConfiguration(
    cfg =>
    {
        cfg.CreateMap<Source, Dest>()
            .ForMember(dest => dest.A1, opt => opt.MapFrom(src => src.C))
            .ForMember(dest => dest.B1, opt => opt.MapFrom(src => src.D));
    })
    .CreateMapper();