Automapper: сложный оператор if else в ForMember
предполагая, что дата является nullable DateTime:
Mapper.CreateMap<SomeViewModels, SomeDTO>()
.ForMember(dest => dest.Date,
opt => opt.MapFrom(src =>
{
DateTime? finalDate = null;
if (src.HasDate == "N")
{
// so it should be null
}
else
{
endResult = DateTime.Parse(src.Date.ToString());
}
return finalDate;
}));
ошибка у меня была: "ошибка 30 лямбда-выражение с заявлением тело не может быть преобразовано в дерево выражения."
конечно, я полностью осознаю, что могу упростить запрос, например:
Mapper.CreateMap<SomeViewModels, SomeDTO>()
.ForMember(dest => dest.Date,
opt => opt.MapFrom(src => src.HasDate == "N" ? null : DateTime.Parse(src.Date.ToString())));
но что, если я настаиваю на сохранении структуры первого примера, потому что у меня более сложные, если еще утверждения, что второй пример не сможет удовлетворить или, по крайней мере, не очень читаемый?
1 ответов
использовать ResolveUsing способ:
Mapper.CreateMap<SomeViewModels, SomeDTO>()
.ForMember(dest => dest.Date, o => o.ResolveUsing(Converter));
private static object Converter(SomeViewModels value)
{
DateTime? finalDate = null;
if (value.Date.HasDate == "N")
{
// so it should be null
}
else
{
finalDate = DateTime.Parse(value.Date.ToString());
}
return finalDate;
}
вот дополнительная информация:AutoMapper: MapFrom против ResolveUsing