[英]automapper multi objects to one object
我有兩個子類,我需要將 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 中的 List 數據映射到 Foo3 中的 List 元素。
我已經做好了
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 中的列表注釋映射到 Foo3 中的列表注釋。
你應該能夠做到:
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.ANotes
和foo3.BNotes
都應該被正確映射。
接受的答案對於我的情況來說並不是一個可以接受的解決方案。 我昨晚睡着了,有這樣的想法:
假設您想將兩個類Foo1
和Foo2
到Foo3
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; }
}
您真正需要的是另一個用於 Automapper 目的的包裝類。
public class Foo1And2 {
public Foo1 Foo1 {get;set;}
public Foo2 Foo2 {get;set;}
}
然后定義映射:
CreateMap<Foo1And2, Foo3>().ConvertUsing(x => ConvertFoo1And2ToFoo3(x));
public Foo3 ConvertFoo1And2ToFoo3(Foo1And2 foo1And2)
{
return new Foo3
{
Ison = foo1And2.Foo1.Ison && foo1And2.Foo2.Ison,
Anotes = foo1And2.Foo1.Anotes,
Bnotes = foo1And2.Foo2.Bnotes,
};
}
並使用它
var foo3 = Map<Foo3>(new Foo1And2
{
Foo1 = foo1,
Foo2 = foo2,
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.