Automapper конвертировать из нескольких источников, когда один из источников является нулевым - PullRequest
0 голосов
/ 03 марта 2019

Как и в вопросе, опубликованном здесь , я хотел бы отобразить несколько источников на один объект назначения.В моем случае существует вероятность того, что несколько исходных объектов могут быть нулевыми, в этом случае я хочу, чтобы autopper отображал остальные свойства из других источников.

public class People {
   public string FirstName {get;set;}
   public string LastName {get;set;}
}

public class Phone {
   public string HomeNumber {get;set;}
   public string Mobile {get;set;}
}

public class PeoplePhoneDto {
    public string FirstName {get;set;}
    public string LastName {get;set;}
    public string HomeNumber {get;set;}
    public string Mobile {get;set;}
}

var people = repository.GetPeople(1);
var phone =  repository.GetPhone(4); // assume this returns null object

Конфигурация сопоставления:

Mapper.CreateMap<People, PeoplePhoneDto>()
        .ForMember(d => d.FirstName, a => a.MapFrom(s => s.FirstName))
        .ForMember(d => d.LastName, a => a.MapFrom(s => s.LastName));
Mapper.CreateMap<Phone, PeoplePhoneDto>()
        .ForMember(d => d.HomeNumber, a => a.MapFrom(s => s.HomeNumber))
        .ForMember(d => d.Mobile, a => a.MapFrom(s => s.Mobile));

Метод расширения:

public static TDestination Map<TSource, TDestination>(this TDestination destination, TSource source)
{
    return Mapper.Map(source, destination);
}

Использование:

var response = Mapper.Map<PeoplePhoneDto>(people)
                .Map(phone);

Теперь, если phone равно нулю, response также будет отображаться как null.Есть ли способ response должен содержать хотя бы значения из People?

Не уверен, но можем ли мы что-то сделать в методе расширения:

public static TDestination Map<TSource, TDestination>(this TDestination destination, TSource source)
{
    if(source == null) //Do something;
    return Mapper.Map(source, destination);
}

1 Ответ

0 голосов
/ 03 марта 2019
public static TDestination Map<TSource, TDestination>(this TDestination destination, TSource source)
{
    if(source == null)
        return destination;

    return Mapper.Map(source, destination);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...