AutoMapper - пропустить весь объект из дочерней коллекции - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть родительский класс со списком дочерних объектов. Child имеет свойство bool, которое определяет, должно ли оно быть в списке Parent после сопоставления. Родитель имеет то же свойство, но это не то, что уместно в этом случае:

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

Мне было интересно, может ли быть написано отображение, которое в конечном итоге получит Родитель с коллекцией дочерних объектов, имеющих WillMap == правда? Я знаю об условном отображении и о том, что мы можем сделать что-то вроде

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

, но в данном случае это свойство родительского объекта WillMap, которое предназначается.

Спасибо.

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

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

0 голосов
/ 03 апреля 2020

Вы можете выполнить фильтрацию внутри 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...