我有一个带有子对象列表的父类。子级具有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属性。
谢谢。
.ForMember(dest => dest.Children, opt => opt.MapFrom(source => source.Children.Where(child => child.WillMap));
您可以在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