自动映射:将类型对象上的单个成员映射到对象的Icollection

时间:2016-04-29 14:20:27

标签: c# automapper

我正在尝试将单个对象映射到一个字段,该字段是使用automapper对象的ICollection,示例布局就是这样......

public class BarDto {
    public int id {get;set;}
    public int name {get;set;}
    public ICollection<ExampleObject> FooCollection {get;set;}
}

public class Bar {
    public int id {get;set;}
    public int name {get;set;}
    public ExampleObject Foo {get;set;}
}


Mapper.CreateMap<BarDto, Bar>()
            .ForMember(dest => dest.FooCollection, opts => opts.MapFrom(src => src.Foo));

无论如何将src.foo转换为列表等以接受为ICollection?

1 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

Mapper.CreateMap<Bar, BarDto>()
      .ForMember(dest => dest.FooCollection, opts => opts.MapFrom(src => new List<ExampleObject>() { src.Foo } ));

或者您可以实现自己的ValueResolver<ExampleObject, List<ExampleObject>>

并执行以下操作:

public class ExampleResolver: ValueResolver<ExampleObject, List<ExampleObject>>
{
    protected override List<ExampleObject> ResolveCore(ExampleObject source)
    {
        return new List<ExampleObject>() { source };
    }
}

然后:

Mapper.CreateMap<BarDto, Bar>()
      .ForMember(dest => dest.FooCollection, opts => opts.ResolveUsing<ExampleResolver>());

第二种方法通常用于更复杂的情况,但您可以选择任何您想要的方法。

希望,这有帮助。