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

本文关键字:映射 平面 目标 列表 单个源 数组 属性 | 更新日期: 2023-09-27 18:35:36

我正在使用.NET 4.5和Automapper 3.0

我有一个源对象,其中包含一个 Child 对象数组作为属性:

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; }
}

我需要做的是将源代码的单个实例映射到 Dest 的集合(IList,Dest[],与哪种集合无关)。

也就是说,对于源的单个实例

Name = "MySource"
Dest = [Val1 = "A", Val2 = "B"]
       [Val1 = "C", Val2 = "D"]

我需要返回 Dest 的 2 件商品集合

Dest[0]: {Name="MySource", Val1="A", Val2="B"}
Dest[1]: {Name="MySource", Val1="C", Val2="D"}

这可以用自动映射器来完成吗?

我尝试了以下方法,但没有一个有效(显然):

Mapper.CreateMap<Source,Dest>();
var items = Mapper.Map<Source,Dest>();
Mapper.CreateMap<Source,Dest[]>();
var items = Mapper.Map<Source,Dest[]>();
Mapper.Createmap<Source,Dest>();
var items = Mapper.map<Source,Dest[]>();

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

使用 ConstructUsing

Mapper.CreateMap<Source, Dest[]>()
    .ConstructUsing(s => s.Values.Select(c => new Dest 
        { 
            Name = s.Name,
            Val1 = c.Val1,
            Val2 = c.Val2
        }).ToList());