我想使用AutoMapper将一个集合映射到另一个集合。我知道约定是为子对象设置映射:
Mapper.CreateMap<User, UserDto>();
然后这很好用:
Mapper.Map<List<UserDto>>(UserRepo.GetAll());
但我仍然想要列出清单。例如,我想做这样的事情:
Mapper.CreateMap<List<User>, List<UserDto>>()
.AfterMap((source, destination) =>
{
// some complex/expensive process here on the entire user list
// such as retrieving data from an external database, etc
}
这样我仍然可以使用第一张地图,但也可以使用用户列表进行自定义操作。在我的场景中,它正在另一个数据中心的外部数据库中查找事件ID,我想通过仅查找唯一ID来优化它,而不是逐个对象地进行优化。
但是,当我尝试将User列表映射到UserDto列表时,映射只返回一个空列表。在AfterMap
函数中放置断点会显示destination
变量包含空列表。如何让AutoMapper正确执行此操作?
答案 0 :(得分:2)
Mapper.CreateMap<List<User>, List<UserDto>>()
.ConvertUsing(source =>
{
// some complex/expensive process here on the entire user list
// such as retrieving data from an external database, etc
return source.Select(Mapper.Map<User, UserDto>).ToList());
});
也许这不是你的意思,但它对我有用。