Отображение оптимизации автомаптера (модель для просмотра модели -> получить последнюю версию)

Я пытаюсь оптимизировать эту часть кода:

   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

Может ли кто-нибудь предложить пример или предложение о том, как подойти к оптимизации в этой ситуации?

2 ответа

Оптимизация картирования:

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

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.

Другие вопросы по тегам