private List <MaintenanceWindowInterval> LoadIntervals()
        {
            var intervals   = new List <MaintenanceWindowInterval>();
            var selectQuery = (Select) new Select(_userConnection)
                              .Cols("DayOfWeek.Number as DayNumber", "StartTime", "EndTime")
                              .From("MaintenanceWindow")
                              .InnerJoin("DayOfWeek").On("DayOfWeek", "Id").IsEqual("MaintenanceWindow", "DayOfWeekId");

            selectQuery.ExecuteReader(reader => {
                var interval = new MaintenanceWindowInterval(reader);
                intervals.Add(interval);
            });
            return(intervals);
        }
        /// <summary>
        /// Determines whether the given date is inside any of maintenance windows.
        /// </summary>
        /// <param name="date">The date, to check.</param>
        /// <returns>
        /// <c>true</c> if the given date inside some maintenance window; otherwise, <c>false</c>.
        /// </returns>
        public virtual bool IsDateInMaintenanceWindow(DateTime date)
        {
            DateTime utcDate   = date.ToUniversalTime();
            TimeSpan time      = utcDate.TimeOfDay;
            var      dayOfWeek = (int)utcDate.DayOfWeek;
            MaintenanceWindowInterval interval = _intervals.Value.FirstOrDefault(windowInterval => {
                bool isTheDayOfInterval  = windowInterval.DayOfWeek == dayOfWeek;
                bool isNextDayOfInterval = (windowInterval.DayOfWeek + 1) % 7 == dayOfWeek;
                var start             = windowInterval.StartTime;
                var end               = windowInterval.EndTime;
                bool isInsideInterval =
                    start <= time && time <= end && isTheDayOfInterval ||
                    end <= start && start <= time && isTheDayOfInterval ||
                    time <= end && end <= start && isNextDayOfInterval;
                return(isInsideInterval);
            });

            return(interval != null);
        }