public ExcelPackage CreateInProgressReport(DateTime date) { var projects = _projectRepository.FindBy(p => p.State == ProjectState.InProgress && p.StartDate <= date && p.FinishDate >= date).ToList(); var tasks = _taskRepository.FindBy(p => p.State == TaskState.InProgress && p.StartDate <= date && p.FinishDate >= date).ToList(); foreach (var project in projects) { var projectTasks = tasks.Where(p => p.ProjectId == project.Id).ToList(); project.Tasks = projectTasks.ToList(); } // By default EF Core disable lazy loading // But when we load projects, it automatically builds hierarchy for us // So we need to pass just root projects var rootProjects = projects.Where(p => p.ParentId == null); return(_reportBuilder.GenerateReport(rootProjects)); }