Как я могу добавить более двух глубинных методов суммирования с помощью Autopper? - PullRequest
0 голосов
/ 14 апреля 2019

Я кодирую 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)))));

Итак,это лучший способ добавить методы вложенных сумм?

Это иерархия:

  1. Проект (Расчетные показатели)
  2. - Доставляемый (Расчетные показатели)
  3. --- Виды деятельности (расчетные показатели)
  4. ---- Задачи (расчетные показатели)
  5. ----- Подзадачи (фактические показатели)
  6. ------ Зависимости подзадач (фактические показатели)

Спасибо

...