Automapper优化映射(从模型到视图模型)获取最新版本)

本文关键字:模型 优化 获取 最新版 新版本 视图 Automapper 映射 | 更新日期: 2023-09-27 18:08:49

我正在尝试优化这部分代码:

   Mapper.CreateMap<Document, DocumentViewModel>()
        .ForMember(g => g.Id, map => map.MapFrom(d => d.documentVersion.Where(v => v.version == d.documentVersion.Select(s => s.version).Max()).OrderByDescending(s => s.subVersion).First().Id))
        .ForMember(g => g.IdRootDocument, map => map.MapFrom(d => d.Id))
        .ForMember(g => g.certyficateType, map => map.MapFrom(d => d.documentVersion.Where(v => v.version == d.documentVersion.Select(s => s.version).Max()).OrderByDescending(s => s.subVersion).First().certyficateType))

我正在使用automapper,我正在尝试优化这部分代码

在这一部分中,我尝试将对象从文档映射到documentViewModel,在这个复杂的模型中,源数据总是最新的文档版本:

d => d.documentVersion.Where(v => v.version == d.documentVersion.Select(s => s.version).Max()).OrderByDescending(s => s.subVersion).First().myProportyX

谁能提供一个例子或建议,如何接近优化在这种情况下?

Automapper优化映射(从模型到视图模型)获取最新版本)

d => d.documentVersion.Where(v => v.version == d.documentVersion.Select(s => s.version).Max()).OrderByDescending(s => s.subVersion).First().myProporty

你在这里迭代了很多次,你可以考虑这样做:

d.documentVersion.OrderByDescending(v => v.version).ThenByDescending(v => v.subVersion).First().myProperty

,以减少迭代次数,只获得顶级版本/subversion。

优化映射:

       Mapper
            .CreateMap<Document, DocumentViewModel>()
            .ConvertUsing(doc =>
                   {
                       DocumentViewModel result = new DocumentViewModel();
                       DocumentVersion lastVersion = doc.documentVersion.Where(v => v.version == doc.documentVersion.Select(s => s.version).Max()).OrderByDescending(s => s.subVersion).First();
                       Mapper.Map(lastVersion, result);
                       return result;
                   });