2013-02-21 191 views
15

我無法理解以下問題。我有一種感覺,它是LINQ和表達式樹的限制,但不知道如何接受lambda體。我可以做到這一點,而不創建一個自定義轉換器?AutoMapper並將日期時間轉換爲字符串

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

我得到這個錯誤: 與語句體lambda表達式不能轉換爲表達式樹

回答

12

試試這個:

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

十分感謝,所以拉姆達機構不與LINQ工作? – jaffa 2013-02-21 17:13:30

+0

取決於,在這種情況下,因爲需要表達式,所以不能提供「體型」lambda – 2013-02-21 17:30:50

23

爲了使用拉姆達請使用.ResolveUsing而不是.MapFrom

由於每author

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

所以你的說法是這樣的:

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

請注意,直到您手動引用src對象的屬性https:// github,intellisense纔會識別出您想要的ResolveUsing超載。 COM/AutoMapper/AutoMapper /問題/ 227#issuecomment-61118211 – epalm 2014-10-30 16:07:53

相關問題