AutoMapper-从子集合中跳过整个对象

问题描述 投票:0回答:2

我有一个带有子对象列表的父类。子级具有bool属性,该属性定义映射后是否应将其置于“父级”列表中。父级具有相同的属性,但在这种情况下与父级无关:

class Parent
{
   public List<Child> Children { get; set; }
   public bool WillMap { get; set; }
   // more stuff
}
class Child
{
   public bool WillMap { get; set; }
   // more things
}

我想知道是否可以编写一个映射,该映射将最终以Parent并带有WillMap == true的Child对象的集合?我了解条件映射,我们可以做类似的事情

CreateMap<Parent, Parent>()
   .ForMember(d => d.Children, opt => opt.Condition(s => s.WillMap == true));

但是在这种情况下,目标是父级的WillMap属性。

谢谢。

c# automapper
2个回答
1
投票

.ForMember(dest => dest.Children, opt => opt.MapFrom(source => source.Children.Where(child => child.WillMap));


1
投票

您可以在MapFrom中执行过滤

.ForMember(d => d.Children, opt => opt.MapFrom((s, d, obje, conext) => s.WillMap && s.Children != null ? conext.Mapper.Map<Child>(s.Children.Where(x => x.WillMap).ToList()) : null));

或创建一个内部过滤的自定义转换器:

    public class ParentConverter : ITypeConverter<Parent, Parent>
    {
        public Parent Convert(ResolutionContext context)
        {
              // implement conversion logic  


        }
    }

http://docs.automapper.org/en/stable/Custom-type-converters.html

© www.soinside.com 2019 - 2024. All rights reserved.