2011-06-17 14 views
9

Tengo una IList<AdminVAT> y me gustaría copiar esta colección para la colección IList<AdminVATDto>AutoMapper: Copiar IList <> a IList <>

He intentado esto:

IList<AdminVAT> listAdminVAT = new AdministrationService(session).ListDecimal<AdminVAT>(); 
AutoMapper.Mapper.CreateMap<IList<AdminVAT>, List<AdminVATDTO>>(); 
var res = AutoMapper.Mapper.Map<IList<AdminVAT>, IList<AdminVATDTO>>(listAdminVAT); 

recibo esta excepción:

Tratando de mapa System.Collections.Generic.IList`1 [[AdminVAT, eSIT.GC.DataModel, versión = 1.0.0.0, Culture = neutral, PublicKeyToken = null]] para System.Collections.Generic.IList `1 [[AdminVATDTO, eSIT.GC.WebUI, Ver sion = 1.0.0.0, Culture = neutral, PublicKeyToken = null]].

Gracias.

Update1

public class AdminVAT : IAdminDecimal 
{ 
    public virtual int Id { get; set; } 
    public virtual int Code { get; set; } 
    public virtual decimal Value { get; set; } 
} 
public class AdminVATDTO : AdminVAT 
{ 
    [DisplayFormat(DataFormatString = "{0:n2}", ApplyFormatInEditMode = true)] 
    public override decimal Value { get; set; } 
} 

todavía tengo 5 decimal en mi lista desplegable ...

controlador:

IList<AdminVAT> listAdminVAT = new AdministrationService(session).ListDecimal<AdminVAT>(); 
AutoMapper.Mapper.CreateMap<AdminVAT, AdminVATDTO>(); 
model.ListVAT = AutoMapper.Mapper.Map<IList<AdminVAT>, IList<AdminVATDTO>>(listAdminVAT); 

HTML:

@Html.DropDownList("ddVAT", new SelectList(Model.ListVAT, "Id", "Value", Model.Estimation.AdminVAT)) 

Respuesta

19

definir el mapeo sólo entre los tipos simples, como se explica en el documentation:

AutoMapper.Mapper.CreateMap<AdminVAT, AdminVATDTO>(); 

Entonces usted será capaz de convertir entre listas, colecciones, enumerables de esos tipos:

IList<AdminVATDTO> res = AutoMapper.Mapper.Map<IList<AdminVAT>, IList<AdminVATDTO>>(listAdminVAT); 
+0

He intentado esto creo . El tipo de res es "IList , IList >", necesita IList

+0

@ Kris-I, debe haber intentado con otra cosa. El tipo de 'res' como se muestra en mi ejemplo es' IList '. He actualizado mi respuesta para aclarar esto en lugar de usar 'var'. –

+0

@Darin Tienes razón, CodeRush cuando hago una "variable Delcare" dame: IList , IList > –

Cuestiones relacionadas