1 つのマッピングだけでこれを実行できるはずです1 :
KeyValuePair<User, bool>
を にマッピングする必要がありますUserDto
。これは、AutoMapper がディクショナリのコンテンツを、List<T>
最終的に作成する のコンテンツにマップできるようにするために必要です (詳細については、この回答を参照してください)。
Mapper.CreateMap<KeyValuePair<User, bool>, UserDto>()
.ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.Key.UserName))
.ForMember(dest => dest.Avatar, opt => opt.MapFrom(src => src.Key.Avatar))
.ForMember(dest => dest.IsFriend, opt => opt.MapFrom(src => src.Value));
次に、.Map
呼び出しでマッピングを使用します。
Mapper.Map<Dictionary<User, bool>, List<UserDto>>(...);
コレクション自体をマップする必要はありません。AutoMapper は、コレクションのコンテンツを相互に (この場合はに)マップしている限り、Dictionary
から へのマップを処理できるためです。List
KeyValuePair<User, bool>
UserDto
編集User
:すべてのプロパティをにマッピングする必要のない別のソリューションを次に示しますUserDto
。
Mapper.CreateMap<User, UserDto>();
Mapper.CreateMap<KeyValuePair<User, bool>, UserDto>()
.ConstructUsing(src => Mapper.Map<User, UserDto>(src.Key))
.ForMember(dest => dest.IsFriend, opt => opt.MapFrom(src => src.Value));
1 AutoMapper 2.0 の使用