21

我无法理解以下问题。我感觉这是 LINQ 和表达式树的限制,但不确定如何接受 lambda 主体。我可以在不创建自定义转换器的情况下实现这一目标吗?

 Mapper.CreateMap<I_NEWS, NewsModel>()                  
              .ForMember(x => x.DateCreated, opt => opt.MapFrom(src => {
                  var dt = (DateTime)src.DateCreated;
                  return dt.ToShortDateString();                      
              }));

我收到此错误: 无法将带有语句体的 lambda 表达式转换为表达式树

4

3 回答 3

24

要使用 lambda 主体,请使用.ResolveUsing而不是.MapFrom.

根据作者

MapFrom 有一些额外的东西需要表达式树(如空检查等)。

所以你的陈述看起来像这样:

 Mapper.CreateMap<I_NEWS, NewsModel>()                  
              .ForMember(x => x.DateCreated, opt => opt.ResolveUsing(src => {
                  var dt = (DateTime)src.DateCreated;
                  return dt.ToShortDateString();                      
              }));
于 2013-04-15T14:52:20.570 回答
20

尝试这个:

Mapper.CreateMap<I_NEWS, NewsModel>().ForMember(x => x.DateCreated,
  opt => opt.MapFrom(src => ((DateTime)src.DateCreated).ToShortDateString()));
于 2013-02-21T16:44:58.950 回答
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) ) )
于 2020-07-29T06:12:16.403 回答