2014-05-22 10 views
6

Ho uno scenario in cui devo fare dopo la mappaturaautomapper: Collection per singola stringa Proprietà

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; }  
} 

E corrispondente Visualizza i modelli

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; } 
} 

voglio mappa utilizzando automapper in cui Dovrei ottenere il nome del servizio come stringa separata da virgola in classe CompanyViewModel

Mapper.CreateMap<Company, CompanyViewModel>(); 

risposta

9

È possibile utilizzare il seguente mappatura:

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

Ma nota che non sarà in grado di utilizzare la mappatura in un IQueryable per LINQ to Entities direttamente, perché EF un'eccezione che si può' t convertire la parte string.Join in SQL. Dovrai utilizzare AsEnumerable e quindi eseguire la mappatura, ad esempio:

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

Questa risposta mi ha aiutato. Ma hai un esempio di cosa intendi con AsEnumerable? Ho già riscontrato che non funziona con un IQueryable –

Problemi correlati