我必须转换两个IEnumerables对象,让它们称之为Obj1和Obj2。
为此,我使用automapper直接投射两个列表,如下所示:
config = new MapperConfiguration(cfg => {
cfg.CreateMap<IEnumerable<Obj1>, IEnumerable<Obj2>>();
});
mapper = config.CreateMapper();
但我有一个问题,因为我想给Obj2列表中的所有元素一个默认值。有没有办法保持IEnumerable演员?
我想到的唯一解决方案是为元素本身创建映射器,然后在Obj1列表中的所有元素之间进行迭代并转换为类型Obj2,如下所示:
config = new MapperConfiguration(cfg => {
cfg.CreateMap<Obj1, Obj2>();
});
mapper = config.CreateMapper();
然后,在Obj1列表中的foreach元素中,强制转换并添加到Obj2类型的列表中。
我想在mapper配置中直接执行此操作,是否有办法执行此操作,保留IEnumerable映射?。
感谢。
答案 0 :(得分:1)
如果您有基础对象的地图,则不需要这些对象的集合的地图。而是在调用Map<TDestination>()
时设置目标类型。请参阅AutoMapper Docs: Lists and Arrays。
config = new MapperConfiguration(cfg => {
cfg.CreateMap<Obj1, Obj2>()
.ForMember(dest => dest.ShouldBeDefaulted,
o => o.MapFrom(src => src.ShouldBeDefaulted == null
? TheDefaultValue : src.ShouldBeDefaulted ));
});
var source = new List<Obj1>() { new Obj1("A"), new Obj1("B")};
// tell AutoMapper that the destination should be a collection during call to Map()
Obj2[] dest = mapper.Map<Obj2[]>(source);
Assert.AreEqual(2, dest.Length);