【问题标题】:How can I use AutoMapper to map one collection to another?如何使用 AutoMapper 将一个集合映射到另一个集合?
【发布时间】:2023-04-04 16:34:01
【问题描述】:

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

【问题讨论】:

    标签: c# automapper


    【解决方案1】:

    嗯,这很尴尬。五分钟后,我发现您可以添加一个 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());
            });
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 2012-01-03
      • 2016-12-21
      相关资源
      最近更新 更多