AutoMapper将集合映射到嵌套对象集合

时间:2019-01-24 12:49:57

标签: c# automapper

我正在尝试将具有collection属性的对象映射到具有嵌套类的另一个对象,该嵌套类包含源集合的映射版本,但是我似乎无法找出所需的适当映射。

下面是我的课程和尝试的映射。

public class TypeA
{
    public int Id;
    public string Description;
}

public class TypeB
{
    public int Id;
    public int Code;
}

public class Source
{
    public ICollection<TypeA> A;
    public ICollection<TypeB> B;
}

public class Destination
{
    public DestinationInner Inner;
}

public class DestinationInner
{
    public ICollection<int> A;
    public ICollection<int> B;
}

我定义了以下映射,当目标集合位于父级别而不是DestinationInner类中时,可以正常工作。

Mapper.CreateMap<TypeA, int>()
          .ConvertUsing(a => a.Id);

Mapper.CreateMap<TypeB, int>()
          .ConvertUsing(b => b.Id);

我尝试添加一个地图,例如,但是我找不到在这里强制在集合上进行映射的方法

Mapper.CreateMap<Source, Destination>()
          .ForMember(d => d.Inner,
                     opt.MapFrom(s => new DestinationInner()
                                      {
                                          // not sure if I can assign anything here
                                          A = 
                                          B = 
                                      }));

是从适当的方法中使用Map还是在错误的方向上进行操作?

另一种选择是不对集合使用AutoMapper,而仅使用Linq,但是我认为必须有一种方法可以完全使用AutoMapper:

Mapper.CreateMap<Source, Destination>()
          .ForMember(d => d.Inner,
                     opt.MapFrom(s => new DestinationInner()
                                      {
                                          A = s.A.Select(a => a.Id).ToList(),
                                          B = s.B.Select(b => b.Id).ToList(),
                                      }));

0 个答案:

没有答案