C# 将具有数组属性的单个源映射到平面目标列表
我正在使用.NET4.5和Automapper3.0 我有一个源对象,其子对象数组作为属性:C# 将具有数组属性的单个源映射到平面目标列表,c#,automapper-3,C#,Automapper 3,我正在使用.NET4.5和Automapper3.0 我有一个源对象,其子对象数组作为属性: public class Source { public string Name { get; set; } public Child[] Values { get; set; } } public class Child { public string Val1 { get; set; } public string Val2 { get; set; } } 我的目
public class Source
{
public string Name { get; set; }
public Child[] Values { get; set; }
}
public class Child
{
public string Val1 { get; set; }
public string Val2 { get; set; }
}
我的目标物体是平面的
public class Dest
{
public string Name { get; set; }
public string Val1 { get; set; }
public string Val2 { get; set; }
}
我需要做的是将一个Source实例映射到Dest的集合(IList,Dest[],不管是哪种集合)
也就是说,对于具有
Name = "MySource"
Dest = [Val1 = "A", Val2 = "B"]
[Val1 = "C", Val2 = "D"]
我需要返回一个2项的Dest集合
Dest[0]: {Name="MySource", Val1="A", Val2="B"}
Dest[1]: {Name="MySource", Val1="C", Val2="D"}
这可以用automapper完成吗
我尝试了以下方法,但没有一种有效(显然):
Mapper.CreateMap();
var items=Mapper.Map();
CreateMap();
var items=Mapper.Map();
Createmap();
var items=Mapper.map();
使用构造使用
Mapper.CreateMap<Source, Dest[]>()
.ConstructUsing(s => s.Values.Select(c => new Dest
{
Name = s.Name,
Val1 = c.Val1,
Val2 = c.Val2
}).ToList());
Mapper.CreateMap()
.ConstructUsing(s=>s.Values.Select(c=>newdest
{
Name=s.Name,
Val1=c.Val1,
Val2=c.Val2
}).ToList());
太好了,谢谢!如果您的整个映射是由ConstructUsing
定义的,那么您就失去了按名称推断字段的许多好处。但是,如果除了Name
之外还有许多其他字段,则可以在ConstructUsing
语句中调用Mapper.Map()
。不过,在这种情况下,这将过于复杂。
Mapper.CreateMap<Source, Dest[]>()
.ConstructUsing(s => s.Values.Select(c => new Dest
{
Name = s.Name,
Val1 = c.Val1,
Val2 = c.Val2
}).ToList());