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