Элемент списка сопоставления Automapper, как использовать пункт назначения, если источник пуст
Я отображаю классы ниже, используя Automapper
public class InfoDto
{
public List<string> Names { get; set; }
}
public class Info
{
public List<string> Names { get; set; }
}
Я хочу сохранить destination Names
значение, если source Names
равно нулю или пусто. Я попытался настроить Mapper, как показано ниже, но, похоже, он очищаетdestination Names
перед отображением.
CreateMap<InfoDto, Info>()
.ForMember(d => d.Names,
opt => opt.MapFrom(
(src, dest) =>
src.Names != null && src.Names.Any() ? src.Names : dest.Names));
var infoDto = new InfoDto{ Names = new List<string>{"Test1", "Test2"}};
var info = Mappert.Map<Info>(infoDto);
var infoDto1 = new InfoDto{ Names = null};
Mapper.Map<InfoDto, Info>(infoDto1, info);
// info.Names should be list with 2 values
Есть ли способ получить / сохранить destination Names
значение и используйте его, если source Names
пустой?
1 ответ
Я не знаю, может ли быть другое решение, кроме этого, которое я только что протестировал и работает.
Я часто считаю полезным обрабатывать более сложные сопоставления в Aftermap
метод. Это дает вам больше свободы для добавления дополнительной сложности. В этом случае вы можете создать карту следующим образом:
CreateMap<InfoDto, Info>()
.ForMember(d => d.Names, opt => opt.Ignore())
// here you can map other properties just regularly if you want
.AfterMap(mapNames);
Вы игнорируете свойства, которые хотите отобразить в Aftermap
метод. В вашем случаеAftermap
будет выглядеть примерно так:
private void mapNames(InfoDto source, Info destination)
{
if (source.Names != null && source.Names.Any())
{
destination.Names = source.Names;
}
}