automapper优化映射(模型到视图模型 - >获取最新版本)

时间:2015-08-19 14:18:45

标签: c# asp.net-mvc asp.net-mvc-4 automapper automapper-3

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

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

我使用的是自动播放器,我试图优化这部分代码

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

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

在这种情况下,是否有人可以提供有关如何进行优化的示例或建议?

2 个答案:

答案 0 :(得分:0)

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

减少迭代次数,只得到顶级版本/颠覆。

答案 1 :(得分:0)

优化映射:

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