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

问题描述 投票:0回答:3

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

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

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

c# .net linq automapper
3个回答
25
投票

为了使用 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();                      
              }));

23
投票

试试这个:

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

0
投票

如果

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)
                        )
                )
© www.soinside.com 2019 - 2024. All rights reserved.