AutoMapper - 条件映射

时间:2011-04-27 14:16:58

标签: c# .net .net-4.0 automapper

我环顾四周,无法找到问题的答案。我要做的是条件映射目标对象(不是字段/属性,对象)。换句话说,就像这样:

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");

我只是在配置选项中看不到任何似乎支持这一点的内容。任何帮助将非常感激!提前谢谢。

2 个答案:

答案 0 :(得分:6)

AFAIK目前没有任何内置功能可以帮助您实现这一目标。您可以执行以下操作:

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

答案 1 :(得分:5)

这不是很好,因为你自己最终有效地完成了映射....但是它可以用于特殊情况,并允许映射逻辑内部包含....

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