Esempio n. 1
0
        private Expression GetSmallerValueExpression(BuildPropertyExpressionContext context, Type type)
        {
            var name = $"{context.Property.Name}-start";
            var lowerBoundQueryValue = context.ValueProvider.GetQueryValue(name, type);

            context.ModelState.AddIfValueNotNull(name, lowerBoundQueryValue.ModelState);
            context.IsHandled |= lowerBoundQueryValue.ModelState != null;

            if (lowerBoundQueryValue.Value == null)
            {
                return(null);
            }
            var lowerBound = lowerBoundQueryValue.Value;

            return(Expression.GreaterThanOrEqual(
                       context.PropertyExpression.Type == type ?
                       context.PropertyExpression :
                       context.PropertyExpression.Property("Value"),
                       Expression.Constant(lowerBound)
                       ));
        }
        public override Expression BuildExpression(BuildPropertyExpressionContext context)
        {
            if (context.Property.PropertyType.NotIn(typeof(DateTime), typeof(DateTime?)))
            {
                return(null);
            }

            var after  = GetAfterStartDateExpression(context);
            var before = GetBeforeEndDateExpression(context);

            if (after == null && before == null)
            {
                return(null);
            }
            context.IsHandled = true;
            if (after != null && before != null)
            {
                return(after.AndAlso(before));
            }
            return(after ?? before);
        }
Esempio n. 3
0
        public override Expression BuildExpression(BuildPropertyExpressionContext context)
        {
            if (context.Property.PropertyType.NotIn(typeof(int), typeof(int?), typeof(decimal), typeof(decimal?)))
            {
                return(null);
            }

            Type type  = context.Property.PropertyType;
            var  upper = GetLargerValueExpression(context, type);
            var  lower = GetSmallerValueExpression(context, type);

            if (upper == null && lower == null)
            {
                return(null);
            }
            context.IsHandled = true;
            if (upper != null && lower != null)
            {
                return(upper.AndAlso(lower));
            }
            return(upper ?? lower);
        }