C# AutoMapper Conditional Mapping based upon target value

前端 未结 2 1306
醉酒成梦
醉酒成梦 2021-01-11 12:45

Please can any one advise how to use conditional mapping in AutoMapper to map a value in the TARGET object from a SOURCE object based upon an existing TARGET property value?

相关标签:
2条回答
  • 2021-01-11 13:11

    Using devduder's example I now have the following code which compiles:

    .ForMember(
        destination => destination.Nickname,
        option => 
        {
            option.Condition(resolutionContext =>
                (resolutionContext.InstanceCache.First().Value as ProfileViewModel).NicknameIsVisible);
            option.MapFrom(source => source.Nickname);
        }
    );
    

    However although it compiles and runs through it is not populating the destination.Nickname with anything.

    Edit: I had to change the order of my mapping so the preferences object (which has the values for the "NicknameIsVisible" property was mapped first so the value was available to test against!)

    So the call to my three-way mapping was:

    var profileViewModel = EntityMapper.Map<ProfileViewModel>(preferences, member, account);
    

    This ensured that the preferences object was mapped to the ViewModel first, then the conditional mapping for the account object could take place once the values had been set.

    So this is my solution, but I cannot up-vote my own answer!

    0 讨论(0)
  • 2021-01-11 13:14

    Try this:

    Mapper.CreateMap<UserDetails, ProfileViewModel>()
    .ForMember(
            destination => destination.Nickname,
            option => 
            {
                option.Condition(rc => 
                {
                    var profileViewModel = (ProfileViewModel)rc.InstanceCache.First().Value;
                    return profileViewModel.NicknameIsVisible;
                });
    
                option.MapFrom(source => source.Nickname);
            }
    );
    
    0 讨论(0)
提交回复
热议问题