///------------------------------------------------------------------------------------------------- /// <summary> /// A DateTime extension method that query if 'date' is day off. The days off is configured /// using the Add-calendar event methods. /// </summary> /// /// <param name="date"> The date. </param> /// /// <returns> True if day off, false if not. </returns> /// /// <example> /// <code> /// // LINQ example. /// var starting = new DateTime(2018, 1, 1); /// var ending = new DateTime(2018, 12, 31); /// var allDates = Enumerable.Range(0, 1 + ending.Subtract(starting).Days).Select(i=> starting.AddDays(i)); /// /// CalendarDateTime.AddYearlyDateEvent("theDate", true, 6, 10, false, false); /// var result = allDates.Where(d => d.IsDayOff()); /// // result = [0] = {6/10/2018 12:00:00 AM} /// </code> /// </example> ///------------------------------------------------------------------------------------------------- public static bool IsDayOff(this DateTime date) { date = date.Date; var p = YearlyEventsDictionary.Any(v => v.Value.DayOff && v.Value.Date(date.Year) == date); var m = MonthlyEventsDictionary.Any(v => v.Value.DayOff && v.Value.Date(date.Year, date.Month) == date); var w = WeeklyEventsDictionary.Any(v => v.Value.DayOff && v.Value.IsEventDay(date)); var a = DateEventsDictionary.Any(v => v.Value.DayOff && v.Value.Date == date); return(p || m || w || a); }