AutoMapper and convert a datetime to string

jaffa picture jaffa · Feb 21, 2013 · Viewed 14.4k times · Source

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

Answer

Mrchief picture Mrchief · Apr 15, 2013

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();                      
              }));