AutoMapper and convert a datetime to string

2019-03-18 00:14发布

I can't get my head round the following issue. I have a feeling it is a limitation of LINQ and expression trees, but not sure how to accept the lambda body. Can I achieve this WITHOUT creating a custom converter?

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

I'm getting this error: A lambda expression with a statement body cannot be converted to an expression tree

2条回答
做自己的国王
2楼-- · 2019-03-18 00:40

try this:

Mapper.CreateMap<I_NEWS, NewsModel>().ForMember(x => x.DateCreated,
  opt => opt.MapFrom(src => ((DateTime)src.DateCreated).ToShortDateString()));
查看更多
一夜七次
3楼-- · 2019-03-18 00:44

In order to use lambda bodies, use .ResolveUsing instead of .MapFrom.

As per the author:

MapFrom has some extra stuff that needs expression trees (like null checking etc).

So your statement would look like this:

 Mapper.CreateMap<I_NEWS, NewsModel>()                  
              .ForMember(x => x.DateCreated, opt => opt.ResolveUsing(src => {
                  var dt = (DateTime)src.DateCreated;
                  return dt.ToShortDateString();                      
              }));
查看更多
登录 后发表回答