Как и в вопросе, опубликованном здесь , я хотел бы отобразить несколько источников на один объект назначения.В моем случае существует вероятность того, что несколько исходных объектов могут быть нулевыми, в этом случае я хочу, чтобы 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);
}