如何使用AutoMapper将一个集合映射到另一个集合?

时间:2013-08-30 12:19:56

标签: c# automapper

我想使用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正确执行此操作?

1 个答案:

答案 0 :(得分:2)

嗯,那令人尴尬。五分钟后,我发现你可以添加一个ConvertUsing函数,它只代表一个逐个成员的映射:

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());
        });

也许这不是你的意思,但它对我有用。