いくつかの条件に基づいて、単一のプロパティを複数のソースプロパティの組み合わせとしてマップする必要がある状況があります。
目的地:
public class Email
{
public Email() {
EmailRecipient = new List<EmailRecipient>();
}
public string Subject{get; set;}
public string Body {get; set;}
public virtual ICollection<EmailRecipient> EmailRecipient { get; set; }
}
public class EmailRecipient
{
public int EmaiId { get; set; }
public string RecipientEmailAddress { get; set; }
public int RecipientEmailTypeId { get; set; }
public virtual Email Email { get; set; }
}
ソース:
public class EmailViewModel
{
public List<EmailRecipientViewModel> To { get; set; }
public List<EmailRecipientViewModel> Cc { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
}
public class EmailRecipientViewModel
{
public string RecipientEmailAddress { get; set; }
}
が欲しいです Mapper.Map<EmailViewModel,Email>()
ここで私は私をマッピングしたいEmail.EmailRecipient
との組み合わせとしてEmailViewModel.To
とEmailViewModel.Cc
。ただし、条件は、ToのEmail.EmailRecipient.RecipientEmailTypeId
場合は1 、Ccの場合は2になります。
私の質問が明確であることを願っています。
これを実現するための1つの可能な方法は、この変換に特定の方法を使用するマップを作成することです。マップの作成は次のようになります。
Mapper.CreateMap<EmailViewModel, Email>()
.ForMember(e => e.EmailRecipient, opt => opt.MapFrom(v => JoinRecipients(v)));
JoinRecipients
メソッドが変換自体を実行する場所。単純な実装は次のようになります。
private ICollection<EmailRecipient> JoinRecipients(EmailViewModel viewModel) {
List<EmailRecipient> result = new List<EmailRecipient>();
foreach (var toRecipient in viewModel.To) {
result.Add(new EmailRecipient {
RecipientEmailTypeId = 1,
RecipientEmailAddress = toRecipient.RecipientEmailAddress
});
}
foreach (var ccRecipient in viewModel.Cc) {
result.Add(new EmailRecipient {
RecipientEmailTypeId = 2,
RecipientEmailAddress = ccRecipient.RecipientEmailAddress
});
}
return result;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加