0

我想使用 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 来优化它,而不是逐个对象进行。

但是,当我尝试将用户列表映射到 UserDto 列表时,映射只返回一个空列表。在函数中放置断点AfterMap表明该destination变量包含一个空列表。我怎样才能让 AutoMapper 正确地做到这一点?

4

1 回答 1

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

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

于 2013-08-30T12:26:36.767 回答