c# - 将多个对象自动映射到一个对象

标签 c# automapper

我有两个子类,我需要将 List 元素从中复制到主对象中

public Class Foo1 : Anote
{
  public bool Ison { get; set;}
  public List<Anote>Anotes { get; private set;}

  public Foo1()
  {
    this.Anotes = new List<Anote>();
  }
}

public Class Foo2 : Bnote
{
  public bool Ison { get; set;}
  public List<Bnote>Anotes { get; private set;}

  public Foo2()
  {
    this.Anotes = new List<Bnote>();
  }
}

public Class Foo3 : Cnote
{
   public bool Ison { get; set;}
   public List<Cnote>Anotes { get; private set;}
   public List<Cnote>Bnotes { get; private set; }

}

我将从数据库中检索数据并将这些数据放入 Foo1 和 Foo2。然后我需要 将 Foo1 和 Foo2 中的列表数据映射到 Foo3 中的列表元素中。

我已经做了

Foo1A foo1a = new Foo1A();
Foo2A foo2a = new Foo2A();

Mapper.CreateMap<Foo1, Foo1A>();
Mapper.CreateMap<Foo2, Foo2A>();
Mapper.Map<Foo1, Foo2A>(foo1, foo1a);
Mapper.Map<Foo2, Foo2A>(foo2, foo2a);

这可行,但我需要做的是

将 Foo1 中的列表注释映射到 Foo3 中的列表注释 将 Foo2 中的 List Anotes 映射到 Foo3 中的 List Bnotes。

最佳答案

你应该能够做到:

Mapper.CreateMap<ANote, CNote>();

Mapper.CreateMap<Foo1, Foo3>()
    .ForMember(dest => dest.ANotes, opt => opt.MapFrom(src => src.ANotes))
    .ForMember(dest => dest.BNotes, opt => opt.Ignore());

Mapper.CreateMap<Foo2, Foo3>()
    .ForMember(dest => dest.BNotes, opt => opt.MapFrom(src => src.ANotes))
    .ForMember(dest => dest.ANotes, opt => opt.Ignore());

Foo3 foo3 = new Foo3();

Mapper.Map<Foo1, Foo3>(foo, foo3);
Mapper.Map<Foo2, Foo3>(foo2, foo3);

foo3.ANotesfoo3.BNotes 应该都已正确映射。

关于c# - 将多个对象自动映射到一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12429210/

相关文章:

c# - C# 委托(delegate)中的线程 sleep 时间

c# - Unity3D : Detect if mouse has clicked on a UI element?

c# - 在 HttpContext.Current.Request 中模拟 ServerVariables

entity-framework - 为什么 Automapper.ProjectTo() 抛出空引用异常?

collections - 是否可以将对象映射到 Automapper 中的列表?

c# - AutoMapper 给出无效操作异常

c# - 我应该考虑哪些日志门面?

c# - CA1819 : Properties shouldn't return arrays - What is the right alternative?

c# - AutoMapper 根据其他模型属性值映射所有属性

c# - AutoMapper 花费 4 秒绘制 19 个对象