2013-08-30 129 views
0

我想使用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正確地執行此操作?

回答

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

也許這不是你是如何的意思做,但它爲我的作品。

相關問題