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

时间:2013-02-21 16:42:29

标签: c# .net 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();                      
              }));

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

3 个答案:

答案 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) ) )