public IEnumerable <DateTime> GetAvaliableTime(string DoctorId, DateTime date) { User foundUser = DbContext.Users.Include(u => u.TimeTable).ThenInclude(t => t.Visits).ThenInclude(v => v.Status).FirstOrDefault(u => u.Id == DoctorId); if (foundUser is null) { return(null); } var times = new List <DateTime>(); if (date.DayOfWeek == DayOfWeek.Sunday || date.DayOfWeek == DayOfWeek.Saturday) { return(times); } DateTime currentTime = foundUser.WorktimeStart ?? new DateTime(0, 0, 0, 9, 0, 0); DateTime endTime = foundUser.WorktimeEnd ?? new DateTime(0, 0, 0, 18, 0, 0); do { if (currentTime.ActualTime() < foundUser.BreakStart.ActualTime() || currentTime.ActualTime() > foundUser.BreakEnd.ActualTime()) { times.Add(currentTime); } currentTime = currentTime.AddMinutes(20d); } while (endTime.Hour != currentTime.Hour); foundUser.TimeTable.Visits.Where(v => v.StartTime.DayOfYear == date.DayOfYear && v.Status.Status == VisitStatuses.PENDING).ToList().ForEach(v => { DateTime time = times.FirstOrDefault(t => v.StartTime.Hour == t.Hour && v.StartTime.Minute == t.Minute); if (time is DateTime found) { times.Remove(found); } }); return(times); }