Пример #1
0
        public Expression GetFilterExpression(ParameterExpression itemPram, FilterComparisonOperator comparisonOperator, string valueString)
        {
            var getterMemberExpr = _reader.GetSelectExpression(itemPram);

            if (getterMemberExpr == null)
            {
                throw new InvalidCastException("Getter expression returned from IFieldReader is not of type MemberExpression.");
            }

            object             valueObj           = ConversionUtility.ConvertString(valueString, _reader.FieldType);
            ConstantExpression variableExpression = Expression.Constant(valueObj, _reader.FieldType); // TODO variable not constant?

            var        operatorMethod      = GetOperatorExpressionMethod(comparisonOperator);
            Expression predicateExpression = operatorMethod.Invoke(getterMemberExpr, variableExpression);

            return(predicateExpression);
        }
Пример #2
0
        private static Func <Expression, ConstantExpression, Expression> GetOperatorExpressionMethod(FilterComparisonOperator comparisonOperator)
        {
            switch (comparisonOperator)
            {
            case FilterComparisonOperator.Equals:
                return(Expression.Equal);

            case FilterComparisonOperator.NotEquals:
                return(Expression.NotEqual);

            case FilterComparisonOperator.GreaterThan:
                return(Expression.GreaterThan);

            case FilterComparisonOperator.GreaterThanOrEquals:
                return(Expression.GreaterThanOrEqual);

            case FilterComparisonOperator.LessThan:
                return(Expression.LessThan);

            case FilterComparisonOperator.LessThanOrEquals:
                return(Expression.LessThanOrEqual);

            case FilterComparisonOperator.Contains:
                return(ExpressionCallComparisonMethod("Contains"));

            case FilterComparisonOperator.StartsWith:
                return(ExpressionCallComparisonMethod("StartsWith"));

            case FilterComparisonOperator.EndsWith:
                return(ExpressionCallComparisonMethod("EndsWith"));

            case FilterComparisonOperator.IsIn:
                return(ExpressionCallComparisonMethod("Contains", true));

            default:
                throw new ArgumentOutOfRangeException(nameof(comparisonOperator), comparisonOperator, null);
            }
        }
Пример #3
0
 public FilterInstruction(string fieldName, FilterComparisonOperator comparisonOperator, string valueString)
 {
     FieldName   = fieldName;
     Operator    = comparisonOperator;
     ValueString = valueString;
 }
 public Expression GetFilterExpression(ParameterExpression itemPram, FilterComparisonOperator comparisonOperator, string valueString)
 {
     throw new NotSupportedException("Filtering is not supported for " + _resourceType + ".");
 }