public TSummaryModelDto BuildSummaryModel(DateTime?startDate, DateTime endDate) { Debug.Assert(!startDate.HasValue || startDate.Value.Kind != DateTimeKind.Utc, "Start Date should not be UTC!"); Debug.Assert(endDate.Kind != DateTimeKind.Utc, "End Date should not be UTC!"); var model = new TSummaryModelDto { Projects = _db.TProjects.Where(p => p.TUserID == mContext.TUserID).ToList().Select(p => Mapper.Map <TProjectDto>(p)).ToList() }; var taskToProject = model.Projects.SelectMany(p => p.TTasks.Select(t => new KeyValuePair <int, int>(t.TTaskID, t.TProjectID))).ToDictionary(t => t.Key, p => p.Value); List <TEntry> entries = GetEntries(startDate, endDate, 0, 0); foreach (var taskEntry in entries.GroupBy(e => e.TTaskID)) { if (taskToProject.ContainsKey(taskEntry.Key)) { var projectDto = model.Projects.SingleOrDefault(p => p.TProjectID == taskToProject[taskEntry.Key]); if (projectDto != null) { var taskDto = projectDto.TTasks.SingleOrDefault(t => t.TTaskID == taskEntry.Key); if (taskDto != null) { var report = new TracktorReport(startDate, endDate); foreach (var entry in taskEntry) { var totalContrib = BucketEntry(entry, report); if (!entry.EndDate.HasValue) { taskDto.InProgress = true; projectDto.InProgress = true; model.InProgress = true; } } taskDto.Contrib = report.GetContrib(); } } } } return(model); }