public void ReloadList(object sender, EventArgs e) { int yearInt = int.Parse(YearsList[SelectedYearIndex]); var periodBegin = new DateTime(yearInt, SelectedMonthIndex + 1, 1); var periodEnd = new DateTime(periodBegin.Year, periodBegin.Month, DateTime.DaysInMonth(yearInt, periodBegin.Month)); var monthPlanTime = Context.timeTableWork.GetTimeForAMonth(periodBegin.Year, periodBegin.Month); var wrk = WorksVM.Dictionary.Select(p => p.Value.Work).Where(w => w.StartDate >= periodBegin && w.StartDate <= periodEnd && w.UserID == GlobalInfo.CurrentUser.ID); WorksList = monthPlanTime.GroupJoin(wrk, p => p.Date, w => w.StartDate, (mpt, w) => new { tt = mpt, work = w }) .DefaultIfEmpty() .Where(q => q.tt.PlanningTime > 0.0 || q.work.Sum(m => m.Minutes) > 0) .Select(tmp => new LaborCostsDay { DateTm = tmp.tt.Date, Time = tmp.work.Sum(q => q.Minutes) / 60.0, PlanTime = tmp.tt.PlanningTime }).ToList(); var userAbsences = Context.workWork.GetUserReasonAbsence(); foreach (var day in WorksList) { var reason = userAbsences.FirstOrDefault(ua => ua.AbsenceDate == day.DateTm); day.Reason = reason != null ? reason.Reason.ReasonText : ""; } SumTime = WorksList.Sum(w => w.Time); SumTimePlan = WorksList.Sum(w => w.PlanTime); DiffTime = SumTime - SumTimePlan; }