基于条件的自动映射

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

我正在尝试使用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; }
    }

非常感谢您的帮助。

基于条件的自动映射

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

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

然后使用ConvertUsingTerm简单地转换为string

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