2013-02-21 19 views
15

Nie mogę zrozumieć całej kwestii. Mam przeczucie, że jest to ograniczenie drzew LINQ i ekspresji, ale nie wiem, jak zaakceptować ciało lambda. Czy mogę to osiągnąć BEZ tworzenia niestandardowego konwertera?AutoMapper i przekonwertuj datetime na ciąg

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

dostaję ten błąd: Wyrażenie lambda z ciałem oświadczenie nie mogą być konwertowane do drzewa wyrażenie

Odpowiedz

12

spróbuj tego:

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

wielkie dzięki, więc organy lambda nie działają z LINQ? – jaffa

+0

Zależy, w tym przypadku, ponieważ wyrażenie jest wymagane, nie można podać "cielesnego" lambda. –

23

Aby korzystać lambda ciała, użyj .ResolveUsing zamiast .MapFrom.

Jak na author:

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

Więc twoja wypowiedź będzie wyglądać następująco:

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

Należy zauważyć, że intellisense nie rozpozna, które obciążenie ResolveUsing jest potrzebne, dopóki nie odwołasz ręcznie właściwości obiektu src https: // github. com/AutoMapper/AutoMapper/issues/227 # issuecomment-61118211 – epalm

Powiązane problemy