Я кодирую API с .NET Core 2.2 и EF Core, проект состоит из гибкого менеджера проекта.Я пытаюсь сопоставить объекты моей базы данных с dtos.
Проблема в том, что, например, для расчета индикатора бюджета для задачи мне нужно знать индикатор бюджета для его подзадач, что-то вроде этого.
config.CreateMap<Task, TaskWithIndicators>()
.ForMember(dest => dest.Indicators.Completion,
opt => opt.MapFrom(src => src.SubTasks.Sum(st => st.Progress)))
.ForMember(dest => dest.Indicators.UsedBudget,
opt => opt.MapFrom(src => src.SubTasks.Sum(st => st.InvestedCash)))
.ForMember(dest => dest.Indicators.RemainingDays,
opt => opt.MapFrom(src => src.SubTasks.Sum(st => st
.EstimatedStartDate.AddDays(st.EstimatedDuration)
.Subtract(DateTimeOffset.Now)
.TotalDays)));
Итак, для Деятельности я должен сделать то же самое:
config.CreateMap<Activity, ActivityWithIndicators>()
.ForMember(dest => dest.Indicators.Completion,
opt => opt.MapFrom(src =>
src.Tasks.Sum(t => t.SubTasks.Sum(st =>
st.Progress))))
.ForMember(dest => dest.Indicators.UsedBudget,
opt => opt.MapFrom(src =>
src.Tasks.Sum(t => t.SubTasks.Sum(st => st.InvestedCash))))
.ForMember(dest => dest.Indicators.RemainingDays,
opt => opt.MapFrom(src =>
src.Tasks.Sum(t =>
t.SubTasks.Sum(st =>
st.EstimatedStartDate
.AddDays(t.EstimatedDuration)
.Subtract(DateTimeOffset.Now)
.TotalDays))));
и затем для результата я имею это:
config.CreateMap<Deliverable, DeliverableWithIndicators>()
.ForMember(dest => dest.Indicators.Completion,
opt => opt.MapFrom(src =>
src.Activities.Sum(a => a.Tasks.Sum(t =>
t.SubTasks.Sum(st =>
st.Progress)))))
.ForMember(dest => dest.Indicators.UsedBudget,
opt => opt.MapFrom(src =>
src.Activities.Sum(a =>
a.Tasks.Sum(t =>
t.SubTasks.Sum(st =>
st.InvestedCash)))))
.ForMember(dest => dest.Indicators.RemainingDays,
opt => opt.MapFrom(src =>
src.Activities.Sum(a =>
a.Tasks.Sum(t =>
t.SubTasks.Sum(st =>
st.EstimatedStartDate
.AddDays(t.EstimatedDuration)
.Subtract(DateTimeOffset.Now)
.TotalDays)))));
Итак,это лучший способ добавить методы вложенных сумм?
Это иерархия:
- Проект (Расчетные показатели)
- - Доставляемый (Расчетные показатели)
- --- Виды деятельности (расчетные показатели)
- ---- Задачи (расчетные показатели)
- ----- Подзадачи (фактические показатели)
- ------ Зависимости подзадач (фактические показатели)
Спасибо