2014-05-22 9 views
6

को मैं जिसमें मैं मानचित्रण निम्नलिखितAutoMapper: संग्रह सिंगल स्ट्रिंग संपत्ति

public class Company : BaseEntity 
{    
    public string Name { get; set; }  
    public virtual ICollection<CompanyService> CompanyServices { get; set; } 
} 
public class Service : BaseEntity 
{   
    public string Name { get; set; } 
    public virtual ICollection<CompanyService> CompanyServices { get; set; }  
} 
public class CompanyService : BaseEntity 
{ 
    public long CompanyID { get; set; } 
    public virtual Company Company { get; set; } 

    public long ServiceID { get; set; } 
    public virtual Service Service { get; set; }  
} 

और इसी दृश्य मॉडल क्या करना है एक परिदृश्य है

public class CompanyViewModel : BaseEntity 
{ 
    public string Name { get; set; } 

    public string Services { get; set; } 
} 
public class ServiceViewModel : BaseEntity 
{ 
    public string Name { get; set; } 
} 

public class CompanyServiceViewModel : BaseEntity 
{ 
    public string ServiceName { get; set; } 
} 

मैं जिसमें AutoMapper का उपयोग कर मैप करना चाहते हैं मुझे कंपनी के दृश्य में अल्पविराम से अलग स्ट्रिंग के रूप में सेवा का नाम मिलना चाहिए

Mapper.CreateMap<Company, CompanyViewModel>(); 

उत्तर

9

आप निम्न मैपिंग का उपयोग कर सकते हैं:

Mapper.CreateMap<Company, CompanyViewModel>() 
    .ForMember(dest => dest.Services, 
     m => m.MapFrom(src => string.Join(", ", src.CompanyServices 
                .Select (s => s.Service.Name)))); 

लेकिन ध्यान दें कि आप, मानचित्रण सीधे संस्थाओं को LINQ के लिए एक IQueryable में उपयोग करने के लिए सक्षम नहीं होगा क्योंकि एफई कि यह कर सकते हैं 'एक अपवाद फेंक होगा एस 0 में string.Join भाग को परिवर्तित करें। आपको AsEnumerable का उपयोग करना होगा और फिर मैपिंग करना होगा, जैसे:

Mapper.Map<T>(context.Entities.AsEnumerable(). ...) 
+0

इस उत्तर ने मेरी सहायता की। लेकिन क्या आपके पास उदाहरण के साथ क्या मतलब है इसका एक उदाहरण है? मुझे पहले से ही सामना करना पड़ा है कि यह एक IQueryable के साथ काम नहीं करता है –

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