我无法理解以下问题。我感觉它是LINQ和表达式树的限制,但不确定如何接受lambda体。我可以在不创建自定义转换器的情况下实现此目的吗?
Mapper.CreateMap<I_NEWS, NewsModel>()
.ForMember(x => x.DateCreated, opt => opt.MapFrom(src => {
var dt = (DateTime)src.DateCreated;
return dt.ToShortDateString();
}));
我收到此错误: 带有语句主体的lambda表达式无法转换为表达式树
答案 0 :(得分:24)
要使用lambda实体,请使用.ResolveUsing
代替.MapFrom
。
根据author:
MapFrom有一些需要表达式树的额外东西(比如null) 检查等)。
所以你的陈述如下:
Mapper.CreateMap<I_NEWS, NewsModel>()
.ForMember(x => x.DateCreated, opt => opt.ResolveUsing(src => {
var dt = (DateTime)src.DateCreated;
return dt.ToShortDateString();
}));
答案 1 :(得分:16)
试试这个:
Mapper.CreateMap<I_NEWS, NewsModel>().ForMember(x => x.DateCreated,
opt => opt.MapFrom(src => ((DateTime)src.DateCreated).ToShortDateString()));
答案 2 :(得分:0)
如果Nullable是目标,则:
Mapper.CreateMap()
.ForMember(
dest => dest.StartDate,
opt => opt.MapFrom(
src => string.IsNullOrEmpty(src.StartDate) ? new DateTime?() : DateTime.ParseExact(src.StartDate, DATEFORMAT, CultureInfo.InvariantCulture)
)
)