基于条件的自动映射

时间:2014-04-09 11:00:43

标签: c# c#-4.0 automapper automapping automapper-3

我正在尝试使用Automapper v3从Post结构映射到Postmodel类。我需要将术语名称映射到我的Categories数组,但仅当Type等于“Category”时。

这是我的代码

    public class NewsModel
    {

        public NewsModel(int id)
        {

             Mapper.Initialize(cfg =>
            {

                cfg.CreateMap<Post, PostModel>();

            });

            Posts = new List<PostModel> {Mapper.Map<PostModel>(_newsGetter.GetItem(id))};
        }

        public List<PostModel> Posts { get; set; }

    }

映射到此课程

    public class PostModel
    {

        public String[] Categories { get; set; }

    }

从此结构中映射

    public struct Post
    {

        public Term[] Categories { get; set; }

    }

    public Struct Term
    {
         public string Name{ get; set; }
         public string Type{ get; set; }

    }

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是将过滤后的类别从Post映射到PostModel

cfg.CreateMap<Post, PostModel>()
.ForMember(pm => pm.Categories
           , o => o.MapFrom(p => p.Categories.Where(t => t.Name != "Category")));

然后只需使用Term

string转换为ConvertUsing
cfg.CreateMap<Term, string>().ConvertUsing(t => t.Name);