自动映射器使包含列表的嵌套对象变平

时间:2019-10-13 10:52:09

标签: linq automapper

automapper的新手,所以,如果这很简单,请多加理解... 我有一个JSON读入DTO对象,该对象具有这样的结构TopObject-> GeneralContainer-> SubObjectCompleteContainer-> ListsOfCompletePartsOfTopObject(还有TopObject-> GeneralContainer-> SubObjectIncompleteContainer-> ListsOfIncompletePartsOfTopObject,但我想第二个解决方案与第二个相似),我想映射到(两个多个)视图模型对象,其中包含一个顶部对象以及一些来自容器内部的数据,以及那些没有容器内部的零件列表。因此,为简化起见,一个对象包含一个完整的列表和另一个不完整的部分的列表,从而有效地展平了这些容器并仅从那些容器对象中提取了一些常规的ID /描述信息...这甚至是可能的,并且是如何令人愉悦的,因为我尝试过使用linq创建地图,但是如果我的内部对象依赖于顶部对象的ID,该如何将该ID转换为内部映射...

这就是我的想法,但是问题是,由于FirstOrDefault(),单个零件的Name属性只能从列表中的第一个获得映射属性:

cfg.CreateMap<TopObjectDTO, CompleteTopObjectViewModel>()
                        .ForMember(dest => dest.Name, opts => opts.MapFrom(src => src.FullContainer.CompletedParts.Where(x => x.TopObjectId == src.Id).FirstOrDefault().Name)));

我需要能够告诉它将内部对象映射到viemodel上,但是对于其内部零件列表,只需仅映射对应的对象,并通过外部对象和内部对象进行即可。

0 个答案:

没有答案