AutoMapper: 将IList<>复制到IList<>

9
我是一个有用的助手,可以翻译文本。
我有一个 IList<AdminVAT>,我想将该集合复制到IList<AdminVATDto>集合中。
我尝试过这个方法:
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);

我收到了以下异常信息:
尝试将 System.Collections.Generic.IList`1[[AdminVAT, eSIT.GC.DataModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] 映射到 System.Collections.Generic.IList`1[[AdminVATDTO, eSIT.GC.WebUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]。
谢谢。
更新1
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; }
}

我下拉菜单里还有5个小数...
控制器:
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))
1个回答

22

按照文档中所述,仅在简单类型之间定义映射:

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

那么你就可以在这些类型的列表、集合、可枚举之间进行转换:

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

我想我已经尝试过了。res的类型是“IList<IList<AdminVAT>, IList<AdminVATDTO>>”,需要的是“IList<AdminVATDTO>”。 - TheBoubou
@Kris-I,你一定尝试过其他的方法。如我示例中所示,res 的类型是 IList<AdminVATDTO>。我已经更新了我的答案,使其更加清晰,而不是使用 var - Darin Dimitrov
@Darin,这个MVC还有问题,请查看更新1(即将推出)。 - TheBoubou
@Kris-I,这是完全不同的问题。也许关闭此线程并提出新问题会更好。我能告诉你的是,你正在错误地使用AutoMapper。它不应该在继承关系中使用。使用AutoMapper来映射没有继承关系的类型之间的映射。为什么AdminVATDTO要继承自AdminVAT?这个AdminVATDTO实际上是一个视图模型吗?因为我看到你正在尝试对其进行一些格式化。如果是这样,它绝对不应该从你的模型中继承,而应该定义一个单独的类。 - Darin Dimitrov
@Darin 我在其他情况下也使用Automapper,那个方法可行...但我将在接下来的几分钟内创建一个新问题。 - TheBoubou
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接