Bạn sẽ có thể làm được điều này chỉ với một bản đồ :
Bạn cần để ánh xạ một KeyValuePair<User, bool>
-UserDto
. Điều này là cần thiết cho AutoMapper để có thể ánh xạ nội dung của từ điển đến nội dung của List<T>
mà chúng ta đang tạo ra cuối cùng (có thể tìm thêm giải thích trong this answer).
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));
Sau đó, sử dụng các bản đồ trong .Map
cuộc gọi của bạn:
Mapper.Map<Dictionary<User, bool>, List<UserDto>>(...);
Bạn không cần phải để lập bản đồ các bộ sưu tập bản thân, như AutoMapper có thể xử lý lập bản đồ Dictionary
đến một List
miễn là bạn' ve ánh xạ các nội dung của các bộ sưu tập với nhau (trong trường hợp của chúng tôi, KeyValuePair<User, bool>
đến UserDto
).
Sửa: Đây là một giải pháp mà không yêu cầu lập bản đồ mỗi User
tài sản để 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));
Sử dụng AutoMapper 2.0
Nguồn
2012-05-15 12:14:07
Nếu bất cứ ai có thể cung cấp cho tôi phương pháp thực sự sử dụng tự động hóa, tôi sẽ thay đổi câu trả lời cho câu hỏi! – reach4thelasers