автоматическое отображение определенного свойства bool на основе значения перечисления - PullRequest
0 голосов
/ 29 июня 2018

Целевой класс имеет список bools. DTO, который отображается в целевой класс, имеет 1 свойство enum. в зависимости от того, что является перечислением, некоторые из bools в классе назначения должны быть установлены. как добиться этого в автопрокате? .ForMember () не будет работать, потому что мне нужно будет выполнить проверку перечисления логики для каждого из свойств bool. Я хочу сделать сопоставление this.CreateMap<DestinationDTO, Destination>(), где в зависимости от того, какая выплата установлена: Property1, Property2 или Property3.

См. Ниже:

public class Destination
{
  public bool? Property1{get; set;}
  public bool? Property2{get; set;}
  public bool? Property3{get;set;}
}

public class DestinationDTO
{
   public Enum Payout{get; set;}
}
public Enum Payout
{
  Proration = 1,
  Recurrent = 2,
  Lumpsum = 3
}

Если DestinationDTO.Payout == Payout.Proration, я хочу установить свойство Property1 класса сущности назначения в значение true, аналогично, в зависимости от того, какая это выплата, я мог бы захотеть установить другое свойство в классе сущности. Могу ли я сделать это в automapper при отображении DestinationDTO в класс сущности Destination?

1 Ответ

0 голосов
/ 02 июля 2018

Вы можете сделать это, используя ForMember выражения:

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<DestinationDTO, Destination>()
        .ForMember(d => d.Property1,
            m => m.MapFrom(d => d.Payout == Payout.Proration ? true : default(bool?)))
        .ForMember(d => d.Property2,
            m => m.MapFrom(d => d.Payout == Payout.Recurrent ? true : default(bool?)))
        .ForMember(d => d.Property3,
            m => m.MapFrom(d => d.Payout == Payout.Lumpsum ? true : default(bool?)));
});

var mapper = config.CreateMapper();

var dtos = new[]
{
    new DestinationDTO { Payout = Payout.Proration },
    new DestinationDTO { Payout = Payout.Recurrent },
    new DestinationDTO { Payout = Payout.Lumpsum },
};

var destinations = dtos.Select(d => mapper.Map<Destination>(d));

Не по теме: я бы предпочел ненулевые логические значения. Затем вы можете удалить ? true : default(bool?) части, а Destination по-прежнему говорит правду во всех своих свойствах.

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