C# 自动映射并将日期时间转换为字符串

C# 自动映射并将日期时间转换为字符串,c#,.net,linq,automapper,C#,.net,Linq,Automapper,我无法理解以下问题。我有一种感觉,这是LINQ和表达式树的限制,但不确定如何接受lambda主体。我能在不创建自定义转换器的情况下实现这一点吗 Mapper.CreateMap<I_NEWS, NewsModel>() .ForMember(x => x.DateCreated, opt => opt.MapFrom(src => { var dt = (DateT

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

 Mapper.CreateMap<I_NEWS, NewsModel>()                  
              .ForMember(x => x.DateCreated, opt => opt.MapFrom(src => {
                  var dt = (DateTime)src.DateCreated;
                  return dt.ToShortDateString();                      
              }));
Mapper.CreateMap()
.ForMember(x=>x.DateCreated,opt=>opt.MapFrom(src=>{
var dt=(DateTime)src.DateCreated;
返回dt.ToShortDateString();
}));
我得到了这个错误: 带有语句体的lambda表达式无法转换为表达式树

请尝试以下操作:

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

要使用lambda实体,请使用
.resolve using
而不是
.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()
.FormMember(x=>x.DateCreated,opt=>opt.ResolveUsing(src=>{
var dt=(DateTime)src.DateCreated;
返回dt.ToShortDateString();
}));

如果目标为空,则:


Mapper.CreateMap()
福门博先生(
dest=>dest.StartDate,
opt=>opt.MapFrom(
src=>string.IsNullOrEmpty(src.StartDate)?new DateTime?():DateTime.ParseExact(src.StartDate,DATEFORMAT,CultureInfo.InvariantCulture)
)
)

取决于,在这种情况下,由于需要表达式,因此在手动引用src对象的属性之前,您无法提供intellisense无法识别所需的ResolveUsing重载的“体”lambdaNote