[英]How do you merge two objects in AutoMapper?
給定以下內容:
public class NameValueContainer
{
public string Name { get; set; }
public IList<string> Values { get; set; }
}
var first = new NameValueContainer
{
Name = "First",
Values = new List<string> { "Value1", "Value2" }
}
var second = new NameValueContainer
{
Name = "Second",
Values = new List<string> { "Value3" }
}
使用AutoMapper,我如何first
合並second
以便剩下我?
名稱:“第一名”
值:“ Value1”,“ Value2”,“ Value3”
正如評論所指出的那樣,將其與AutoMapper捆綁在一起實際上沒有任何意義。 最簡單的方法是使用Linq:
var merged = new NameValueContainer
{
Name = first.Name,
Values = first.Values.Union(second.Values).ToList()
};
//merged.Values: "Value1", "Value2", "Value3"
好吧,我知道這沒有什么意義,但是在像這樣的自動映射器中是可能的。
public class NameValueMerger : ITypeConverter<IList<string>, IList<string>>
{
public IList<string> Convert(ResolutionContext context)
{
var source = context.SourceValue as IList<string>;
var destination = context.DestinationValue as IList<string>;
if (source != null &&
destination != null)
{
return destination.Concat(source).ToList();
}
throw new ArgumentException("Types not compatible for converter.");
}
}
public class NameValueContainer
{
public string Name { get; set; }
public IList<string> Values { get; set; }
}
internal class Program
{
static Program()
{
Mapper.CreateMap<NameValueContainer, NameValueContainer>();
Mapper.CreateMap<IList<string>, IList<string>>().ConvertUsing(new NameValueMerger());
}
private static void Main(string[] args)
{
var first = new NameValueContainer { Name = "First", Values = new List<string> { "Value1", "Value2" } };
var second = new NameValueContainer { Name = "Second", Values = new List<string> { "Value3" } };
var result = Mapper.Map(second, first);
Console.Write("Value : " + string.Join(", ", result.Values));
Console.WriteLine();
}
}
此輸出將是
Value : Value1, Value2, Value3
Press any key to continue . . .
只是說-因為您可能並不意味着您應該:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.