2013-02-21 14 views
15

स्ट्रिंग में कनवर्ट करें मैं निम्नलिखित मुद्दे पर अपना सिर नहीं प्राप्त कर सकता हूं। मुझे लगता है कि यह LINQ और अभिव्यक्ति पेड़ों की एक सीमा है, लेकिन यह सुनिश्चित नहीं है कि लैम्ब्डा शरीर को कैसे स्वीकार किया जाए। क्या मैं कस्टम कनवर्टर बनाने के बिना इसे प्राप्त कर सकता हूं?ऑटोमैपर और एक डेटाटाइम को

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

मैं इस त्रुटि हो रही है: एक बयान शरीर के साथ एक लैम्ब्डा अभिव्यक्ति एक अभिव्यक्ति पेड़

उत्तर

12

में परिवर्तित नहीं किया जा सकता है इस प्रयास करें:

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

बहुत धन्यवाद, इसलिए लैम्ब्डा निकायों LINQ साथ काम नहीं करते? – jaffa

+0

इस मामले में, एक अभिव्यक्ति की आवश्यकता होने के बाद से आप एक "बॉडीड" लैम्ब्डा –

23

आदेश लैम्ब्डा उपयोग करने के लिए निकायों, .MapFrom के बजाय .ResolveUsing का उपयोग करें।

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 object https: // github की मैन्युअल रूप से संदर्भित नहीं करते हैं, तब तक आप जो ResolveUsing अधिभार चाहते हैं, उसे पहचान नहीं पाएंगे। com/AutoMapper/AutoMapper/मुद्दों/227 # issuecomment-61,118,211 – epalm

संबंधित मुद्दे