C# 将具有数组属性的单个源映射到平面目标列表

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; } } 我的目

我正在使用.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 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());