AutoMapper并将日期时间转换为字符串

jaf*_*ffa 20 .net c# linq automapper

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

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

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

Mrc*_*ief 24

为了使用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();                      
              }));
Run Code Online (Sandbox Code Playgroud)

  • 需要注意的是智能感知不会承认你想要的ResolveUsing过载,直到您手动引用你的src对象的属性https://github.com/AutoMapper/AutoMapper/issues/227#issuecomment-61118211 (3认同)

Ric*_*ues 16

试试这个:

Mapper.CreateMap<I_NEWS, NewsModel>().ForMember(x => x.DateCreated,
  opt => opt.MapFrom(src => ((DateTime)src.DateCreated).ToShortDateString()));
Run Code Online (Sandbox Code Playgroud)