public static Expression <Func <DateTime?, bool> > IsInRange(this DateTimeRange range)
        {
            var predicate = PredicateBuilder.False <DateTime?>();

            predicate = PredicateBuilder.Or(predicate, date => date == null || (range.FromDate == null || range.IncludeFrom ? range.FromDate <= date : range.FromDate < date) && (range.ToDate == null || range.IncludeTo ? range.ToDate >= date : range.ToDate > date));
            return(LinqKit.Extensions.Expand(predicate));
        }
        public static Expression <Func <DateTime?, bool> > IsInRanges(this DateTimeRange[] ranges)
        {
            var predicate = PredicateBuilder.False <DateTime?>();

            predicate = ranges.Aggregate(predicate, (current, range) => PredicateBuilder.Or(current, IsInRange(range)));
            return(LinqKit.Extensions.Expand(predicate));
        }