使用 automapper 铸造两个 IEnumerables 给出默认值
Give default value using automapper casting two IEnumerables
我必须转换两个 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 的列表。
我想直接在映射器配置中执行此操作,有没有办法做到这一点,同时保持 IEnumerable 映射?
谢谢。
如果您有基本对象的地图,则不需要这些对象集合的地图。相反,在调用 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);
我必须转换两个 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 的列表。
我想直接在映射器配置中执行此操作,有没有办法做到这一点,同时保持 IEnumerable 映射?
谢谢。
如果您有基本对象的地图,则不需要这些对象集合的地图。相反,在调用 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);