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); }
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); }