public static ExcelRecord ToExcelRecord(this Project value, int level) => new ExcelRecord { Id = value.Id, Name = value.Name.IndentValue(level), Description = value.Code, State = value.State.ToString(), StartDate = value.StartDate, FinishDate = value.FinishDate };
private void WriteProjectToCollection( Project project, int level, List <ExcelRecord> records, //collection of data records that will be writed to file List <int> projectsIndexes, //indexes of rows with projects to mark them bold later Expression <Func <ProjectTask, bool> > taskSearch) { projectsIndexes.Add(records.Count); records.Add(project.ToExcelRecord(level)); //add project tasks that fit search condition records.AddRange(project.Tasks.AsQueryable() .Where(taskSearch) .Select(x => x.ToExcelRecord(level + 1))); //add subprojects that contain specified tasks foreach (var subProject in project.Projects.Where(x => x.AllTasks.AsQueryable().Any(taskSearch))) { WriteProjectToCollection(subProject, level + 1, records, projectsIndexes, taskSearch); } }