Automapper Mapping Multiple Properties to Single Property

前端 未结 2 1333
难免孤独
难免孤独 2021-01-18 14:01

I am need help mapping my Domain Object to a ViewModel for use with my C#/MVC App

In the FormAnswer Class there can only be 1 Answer Type (AnswerCurrency, AnswerDate

相关标签:
2条回答
  • 2021-01-18 14:51

    You could use a custom mapping lambda method but it seems like you would need more logic here. A custom resolver seems to be a good option in this case.

    See Automapper wiki

    https://github.com/AutoMapper/AutoMapper/wiki/Custom-value-resolvers

    In the mapping options you can specify a opt.ResolveUsing<TResolver>() where TResolver inherits from ValueResolver<FormAnswer, string>

    Also, if I need to know how to do something with Automapper I find that the unit tests provide very rich documentation.

    Hope that helps.

    0 讨论(0)
  • 2021-01-18 15:00

    ValueResolver is a good suggestion, especially if you have this pattern elsewhere. If you're looking for a quick and dirty version (that is, if this is the only place you need to handle this sort of situation), try this:

    Mapper.CreateMap<FormAnswer, FormAnswerModel>()
                    .ForMember(d => d.Answer, o => o.ResolveUsing(fa =>
                        {
                            string answer = String.Empty;
                            if (fa.AnswerBool.HasValue)
                            {
                                return fa.AnswerBool.Value;
                            }
    
                            if(fa.AnswerCurrency.HasValue)
                            {
                                return fa.AnswerCurrency.Value;
                            }
    
                            if(fa.AnswerDateTime.HasValue)
                            {
                                return fa.AnswerDateTime;
                            }
    
                            if(!String.IsNullOrEmpty(fa.AnswerString))
                            {
                                return fa.AnswerString;
                            }
    
                            return answer;
                        }
                                                    ));
    
    0 讨论(0)
提交回复
热议问题