Automapper:ForMember中的复杂if else语句
假设Date是可以为空的DateTime:
Mapper.CreateMap() .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带有语句主体的lambda表达式无法转换为表达式树。”
当然,我完全清楚我可以简化查询,例如:
Mapper.CreateMap() .ForMember(dest => dest.Date, opt => opt.MapFrom(src => src.HasDate == "N" ? null : DateTime.Parse(src.Date.ToString())));
但是,如果我坚持保留第一个例子的结构,因为我有更复杂的if else语句,第二个例子无法满足或至少不具有可读性,该怎么办?
使用ResolveUsing方法:
Mapper.CreateMap() .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