c# – AutoMapper从源嵌套集合映射到另一个集合

前端之家收集整理的这篇文章主要介绍了c# – AutoMapper从源嵌套集合映射到另一个集合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
编辑:标题不正确,我试图从源列表映射到嵌套模型的源列表.

我在尝试将列表映射到嵌套模型中列出的另一个列表时遇到问题.种类和不平整的种类.问题是我不知道如何做映射.

这是我的设置跟随我失败的映射尝试:

public class DestinationModel
{
    public DestinationNestedviewmodel sestinationNestedviewmodel { get; set; }
}

public class DestinationNestedviewmodel
{
    public List<ItemModel> NestedList { get; set; }
}

public class SourceModel
{
    public List<Item> SourceList { get; set; }
}

其中Item和ItemModel已经在它们之间定义了映射

我不能这样做……

Mapper.CreateMap<SourceModel,DestinationModel>()
.ForMember(d => d.DestinationNestedviewmodel.NestedList,opt => opt.MapFrom(src => src.SourceList))

错误

表达式’d => d.DestinationNestedviewmodel.NestedList’必须解析为顶级成员.参数名称:lambdaExpression

然后我尝试了这样的事情:

.ForMember(d => d.DestinationNestedviewmodel,o => o.MapFrom(t => new DestinationNestedviewmodel { NestedList = t.SourceList }))

那里的问题是
NestedList = t.SourceList.
它们分别包含不同的元素,ItemModel和Item.所以,他们需要被映射.

我该如何映射?

解决方法

我想你想要这样的东西:
Mapper.CreateMap<Item,ItemModel>();

/* Create a mapping from Source to Destination,but map the nested property from 
   the source itself */
Mapper.CreateMap<SourceModel,DestinationModel>()
    .ForMember(dest => dest.DestinationNestedviewmodel,opt => opt.MapFrom(src => src));

/* Then also create a mapping from Source to DestinationNestedviewmodel: */
Mapper.CreateMap<SourceModel,DestinationNestedviewmodel>()
    .ForMember(dest => dest.NestedList,opt => opt.MapFrom(src => src.SourceList));

那么你所要做的就是在Source和Destination之间调用Mapper.Map:

Mapper.Map<SourceModel,DestinationModel>(source);

猜你在找的C#相关文章