0

コードのこの部分を最適化しようとしています:

   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

この状況で最適化にアプローチする方法について、誰かが例や提案を提供できますか?

4

2 に答える 2

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;
                   });
于 2015-08-21T12:00:01.343 に答える
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

反復回数を減らし、最上位のバージョン/サブバージョンのみを取得します。

于 2015-08-19T19:25:48.477 に答える