首页 > 解决方案 > 有条件的映射

问题描述

我想根据条件映射 2 个对象,如果为 true mapp else 忽略,则条件不是源的一部分,也不是目标的一部分

  var mapperconfig = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<Source, Destination>()
               .ForMember(source => source.Titulaires, 
                          opt => opt.Condition(titulaires.HasValue && titulaires == true));
            ....   
        });

扩展方法 Condition() 只接受与源或目标相关的类型。

标签: c#.netautomapper

解决方案


AutoMapper 允许您将条件添加到在映射该属性之前必须满足的属性。

例如。

   public class Foo
{
  public int baz;
}

public class Bar 
{ 
  public uint baz; 
}

public class Program
{
    public static void Main()       
    {
        Mapper.CreateMap<Foo,Bar>().ForMember(dest => dest.baz, opt => opt.Condition(src => (src.baz >= 0)));

        var foo1 = new Foo { baz=-1 };      
        var bar1 = Mapper.Map<Bar>(foo1);

        Console.WriteLine("bar1.baz={0}", bar1.baz);

        var foo2 = new Foo{ baz=100 };
        var bar2 = Mapper.Map<Bar>(foo2);


        Console.WriteLine("bar2.baz={0}", bar2.baz);
    }
}

此外,它们还提供前提条件功能

请参阅此链接条件映射


推荐阅读