Автомаппер "Сплющивание" - PullRequest
       1

Автомаппер "Сплющивание"

1 голос
/ 01 декабря 2011

Я пытаюсь «сгладить» содержимое списка источников в полях объекта Dest следующим образом:

class Source
{
    public IList<TypeX> TypeXs {get; set;}
}

class Dest
{
    public int IdentifierXValue { get; set;}
    public int IdentifierYValue { get; set;}
    public int IdentifierZValue { get; set;}
}

class TypeX
{
   Identifier Identifier {get; set;}
   float Value {get; set;}
}

enum Identifier 
{ 
    X,
    Y,
    Z
}

Отображение от источника к месту назначения работает нормально, используя приведенное ниже отображение:

Mapper.CreateMap<Source, Dest>.ForMember( dest => dest.IdentifierXValue, opt =>     opt.MapForm(src => src.TypeXs.First(f => f.Identifier == Identifier.X).Value));

Как мне добиться обратного отображения? Ссылка «Источник» уже будет существовать, и в ней будут предварительно заполненные ссылки на TypeX. Мне просто нужно найти объект TypeX, идентификатор которого совпадает (скажем, X), и для этого объекта мне нужно заменить значение IdentifierXValue в объекте Dest.

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

Это сработало для меня

Mapper.CreateMap<Dest, Source>()
      .ForMember(d => d.TypeXs, opt => opt.Ignore())
      .AfterMap((s, d) =>
                         {
                          d.TypeXs.First(tx => tx.Identifier == Identifier.X).Value = s.IdentifierXValue;
                          d.TypeXs.First(tx => tx.Identifier == Identifier.Y).Value = s.IdentifierYValue;
                          d.TypeXs.First(tx => tx.Identifier == Identifier.Z).Value = s.IdentifierZValue;
                         }
                );
0 голосов
/ 02 декабря 2011

Я думаю, вам понадобится конвертер пользовательских типов . Это, наверное, самый простой способ.

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