AutoMapper—条件映射

本文关键字:映射 条件 AutoMapper | 更新日期: 2023-09-27 17:53:30

我四处找了找,都找不到问题的答案。我要做的是有条件地映射目标对象(不是字段/属性,对象)。换句话说,就像这样:

public class Source
{
    public int Id {get; set;}
    public string Flag {get; set;}
}
public class Destination
{
    public int Id {get; set;}
}
var sources = new List<Source> 
                  { 
                      new Source{Flag = "V", Id = 1},
                      new Source{Flag = "B", Id = 2} 
                  };
var destinations = Mapper.Map<List<Source>, List<Destination>>(sources);
destinations.Count.ShouldEqual(1);
destinations[0].Id.ShouldEqual(2);

有人知道如何配置类型映射吗?我在找这样的东西:

Mapper.CreateMap<Source, Destination>()
    .SkipIf(src => src.Flag != "B");

我只是在配置选项中没有看到任何支持这个的。任何帮助将非常感激!

AutoMapper—条件映射

据我所知,目前没有任何内置功能允许您实现此功能。您可以这样做:

var destinations = Mapper.Map<List<Source>, List<Destination>>(
    sources.Where(source => source.Flag == "B")
);

这不是很好,因为您最终会自己完成映射....但是在特殊情况下是可以的,并且允许内部包含映射逻辑....

 config.CreateMap<Source, Destination>()
            .AfterMap((source, dest) =>
            {
                 if (source.Flag == "B")
                 {
                     //do stuff
                 }
            });