我需要帮助将我的域对象映射到ViewModel以与我的C#/ MVC应用程序一起使用
在FormAnswer类中,只能有1种答案类型(AnswerCurrency,AnswerDateTime,AnswerBool等),这在数据库和应用程序逻辑中强制执行.
如果存在Answer,则如果所有值都为null,则需要将其映射到FormAnswerModel中的Answer属性,Answer是一个空字符串.
public class FormQuestion
{
public int Id {get; set;)
public string DataType {get; set;}
public string Question {get; set;}
}
public class FormAnswer
{
public int Id {get; set;)
public int QuestionId {get; set;)
public double? AnswerCurrency {get;set}
public dateTime? AnswerDataTime {get;set}
public bool? AnswerBool {get;set}
public string AnswerString{get;set}
public string AnswerText{get;set}
}
public class FormAnswerModel
{
public int Id {get; set;)
public int QuestionId {get; set;)
public string Answer{get;set}
}
Run Code Online (Sandbox Code Playgroud)
E.Z*_*art 17
ValueResolver是一个很好的建议,特别是如果你在其他地方有这种模式.如果你正在寻找一个快速和脏的版本(也就是说,如果这是你需要处理这种情况的唯一地方),试试这个:
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;
}
));
Run Code Online (Sandbox Code Playgroud)