12

编辑:标题不正确,我正在尝试从源列表映射到嵌套模型的源列表。

我在尝试将列表映射到嵌套模型中列出的另一个列表时遇到问题。种类和非扁平化。问题是我不知道如何进行映射。

这是我在映射失败后的设置:

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。它们各自包含不同的元素,分别是ItemModelItem。所以,他们需要被映射。

我如何映射这个?

4

1 回答 1

20

我想你想要这样的东西:

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

那么你所要做的就是在andMapper.Map之间调用:SourceDestination

Mapper.Map<SourceModel, DestinationModel>(source);
于 2012-05-19T12:40:02.090 回答