Отображение оптимизации автомаптера (модель для просмотра модели -> получить последнюю версию)
Я пытаюсь оптимизировать эту часть кода:
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.