【问题标题】:Give default value using automapper casting two IEnumerables使用自动映射器强制转换两个 IEnumerables 提供默认值
【发布时间】:2017-12-04 15:31:03
【问题描述】:

我必须转换两个 IEnumerables 对象,我们称之为 Obj1 和 Obj2。

为此,我使用 automapper 直接投射两个列表,如下所示:

config = new MapperConfiguration(cfg => {
            cfg.CreateMap<IEnumerable<Obj1>, IEnumerable<Obj2>>();
        });

        mapper = config.CreateMapper();

但是我有一个问题,因为我想给 Obj2 列表中的所有元素一个默认值。有没有办法做到这一点保持 IEnumerable 演员?

我想到的唯一解决方案是为元素本身创建映射器,然后在 Obj1 列表中的所有元素之间进行迭代并转换为 Obj2 类型,如下所示:

config = new MapperConfiguration(cfg => {
        cfg.CreateMap<Obj1, Obj2>();
    });

    mapper = config.CreateMapper();

然后,在 Obj1 列表中的一个 foreach 元素中,强制转换并添加到 Obj2 类型的列表中。

我想直接在mapper配置中做这个,有没有办法做到,保持IEnumerable映射?。

谢谢。

【问题讨论】:

    标签: c# .net linq automapper ienumerable


    【解决方案1】:

    如果您有基本对象的映射,则不需要这些对象集合的映射。相反,请在调用Map&lt;TDestination&gt;() 时设置目标类型。见AutoMapper Docs: Lists and Arrays

    config = new MapperConfiguration(cfg => {
        cfg.CreateMap<Obj1, Obj2>()
            .ForMember(dest => dest.ShouldBeDefaulted, 
                       o => o.MapFrom(src => src.ShouldBeDefaulted == null 
                            ? TheDefaultValue : src.ShouldBeDefaulted ));
    });
    
    var source = new List<Obj1>() { new Obj1("A"), new Obj1("B")};
    
    // tell AutoMapper that the destination should be a collection during call to Map()
    Obj2[] dest = mapper.Map<Obj2[]>(source);
    Assert.AreEqual(2, dest.Length);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-08
      • 2020-07-14
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多