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