2013-02-21 20 views
15

Non riesco a capire il seguente problema. Ho la sensazione che sia una limitazione del LINQ e degli alberi di espressione, ma non sono sicuro di come accettare il corpo lambda. Posso ottenerlo senza creare un convertitore personalizzato?AutoMapper e convertire un datetime in stringa

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

sto ottenendo questo errore: Un'espressione lambda con un corpo dichiarazione non può essere convertito in un albero di espressione

risposta

12

provare questo:

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

grande grazie, così corpi lambda non funzionano con LINQ? – jaffa

+0

Dipende, in questo caso poiché un'espressione è richiesta non è possibile fornire un lambda "bodied" –

23

Per poter utilizzare lambda corpi, utilizzare .ResolveUsing anziché .MapFrom.

Come per il author:

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

Così la sua dichiarazione sarebbe simile a questa:

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

Si noti che intellisense non riconoscerà quale sovraccarico di ResolveUsing si desidera finché non si fa riferimento manualmente a una proprietà dell'oggetto src https: // github. com/automapper/automapper/temi/227 # issuecomment-61.118.211 – epalm

Problemi correlati