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から へのマップを処理できるためです。ListKeyValuePair<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 の使用