Многократное условное отображение в Automapper - PullRequest
0 голосов
/ 16 октября 2018

Мне нужна небольшая помощь с некоторыми отображениями, которые я делаю.

Я сопоставляю модель, имеющую два поля

public ProductCategory
public string FirstType
public string SecondType

, с другой моделью, имеющей только одно поле

public string ProductType

Теперь мне нужно сопоставить первый или второй тип с ProductType на основе содержимого ProductCategory. И если условие не выполнено, то ProductType должен быть нулевым

Например, мне нужно что-то вродеэто:

.ForMember(dest => dest.ProductType, opt => opt.MapFrom(src => 
{
   if (src.ProductCategory.Equals("something")
     { 
        src.FirstType
     }
   else if (src.ProductCategory.Equals("something")
     {
        src.SecondType
     }
   else 
    {
       null 
    }
}))

Конечно, синтаксис совершенно неправильный и, очевидно, не сработает, я просто хотел объяснить, чего я пытаюсь достичь.

У меня есть временное решение

.ForMember(dest => dest.ProductType, opt => opt.MapFrom(src => src.ProductCategory.Contains("something") ? src.FirstType: src.SecondType))

но это не совсем то, что мне нужно.

Есть предложения?

Заранее спасибо

1 Ответ

0 голосов
/ 16 октября 2018

Что вы можете сделать, чтобы код карты не выглядел слишком запутанным, так это фактически разделить его на методы, которые, как вы знаете, требуют некоторой проверки правильности присвоения значения.

Вот код

.ForMember(dest => dest.ProductType, opt => opt.MapFrom(src => CalculateProductCategory(src.ProductCategory))) and then you write your own CalculateProductCategory

И ваш метод будет выглядеть примерно так

    public ProductType CalculateProductCategory(ProductCategory category) {

    if (productCategory.Equals("something")
    { 
        return FirstType
    }
    else if (productCategory.Equals("something")
    {
        return SecondType
    }
    else 
    {
       return null 
    }

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