![](/img/trans.png)
[英]Automapper - mapping two different collection properties to a single collection property
[英]Automapper Mapping Multiple Properties to Single Property
我需要幫助將我的域對象映射到 ViewModel 以與我的 C#/MVC 應用程序一起使用
在 FormAnswer 類中只能有 1 種答案類型(AnswerCurrency、AnswerDateTime、AnswerBool 等),這是在數據庫和應用程序邏輯中強制執行的。
如果答案存在,則需要映射到 FormAnswerModel 中的答案屬性,如果所有值都為空,則答案為空字符串。
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}
}
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;
}
));
您可以使用自定義映射 lambda 方法,但似乎您在這里需要更多邏輯。 在這種情況下,自定義解析器似乎是一個不錯的選擇。
參見 Automapper 維基
https://github.com/AutoMapper/AutoMapper/wiki/Custom-value-resolvers
在映射選項中,您可以指定opt.ResolveUsing<TResolver>()
其中TResolver
繼承自ValueResolver<FormAnswer, string>
另外,如果我需要知道如何使用 Automapper 做某事,我發現單元測試提供了非常豐富的文檔。
希望有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.