Exemplo n.º 1
0
 private FieldFilterTerm(AttributeDefinition attributeDefinition, FieldFilterTermOperator op,
     IEnumerable<object> values)
 {
     AttributeDefinition = attributeDefinition;
     Operator = op;
     Values = values;
 }
Exemplo n.º 2
0
 private FieldFilterTerm(AttributeDefinition attributeDefinition, FieldFilterTermOperator op,
                         IEnumerable <object> values)
 {
     AttributeDefinition = attributeDefinition;
     Operator            = op;
     Values = values;
 }
Exemplo n.º 3
0
        internal virtual Expression CreateFilterExpression(FieldFilterTermOperator @operator, IEnumerable <object> values, Expression parameter)
        {
            if (@operator == FieldFilterTermOperator.Exists)
            {
                return(CreateExistsFilterExpression(parameter));
            }

            if (@operator == FieldFilterTermOperator.NotExists)
            {
                var existsExpression = CreateExistsFilterExpression(parameter);
                return(Expression.Not(existsExpression));
            }

            var method = GetOperatorMethod(@operator);

            BinaryExpression result = null;

            foreach (var value in values)
            {
                var left  = CreateExpression(parameter);
                var right = Expression.Constant(value);
                var inner = method(left, right);
                result = result == null ? inner : Expression.OrElse(result, inner);
            }
            return(result);
        }
Exemplo n.º 4
0
        private Func <Expression, Expression, BinaryExpression> GetOperatorMethod(FieldFilterTermOperator @operator)
        {
            switch (@operator)
            {
            case FieldFilterTermOperator.Equal:
                return(Expression.Equal);

            case FieldFilterTermOperator.NotEqual:
                return(Expression.NotEqual);

            case FieldFilterTermOperator.Greater:
                return(Expression.GreaterThan);

            case FieldFilterTermOperator.GreaterOrEqual:
                return(Expression.GreaterThanOrEqual);

            case FieldFilterTermOperator.Less:
                return(Expression.LessThan);

            case FieldFilterTermOperator.LessOrEqual:
                return(Expression.LessThanOrEqual);
            }

            throw new NotSupportedException($"Unsupported operator {@operator}");
        }
Exemplo n.º 5
0
        private Func<Expression, Expression, BinaryExpression> GetOperatorMethod(FieldFilterTermOperator @operator)
        {
            switch (@operator)
            {
                case FieldFilterTermOperator.Equal:
                    return Expression.Equal;
                case FieldFilterTermOperator.NotEqual:
                    return Expression.NotEqual;
                case FieldFilterTermOperator.Greater:
                    return Expression.GreaterThan;
                case FieldFilterTermOperator.GreaterOrEqual:
                    return Expression.GreaterThanOrEqual;
                case FieldFilterTermOperator.Less:
                    return Expression.LessThan;
                case FieldFilterTermOperator.LessOrEqual:
                    return Expression.LessThanOrEqual;
            }

            throw new NotSupportedException($"Unsupported operator {@operator}");
        }
Exemplo n.º 6
0
        internal virtual Expression CreateFilterExpression(FieldFilterTermOperator @operator, IEnumerable<object> values, Expression parameter)
        {
            if (@operator == FieldFilterTermOperator.Exists)
                return CreateExistsFilterExpression(parameter);

            if (@operator == FieldFilterTermOperator.NotExists)
            {
                var existsExpression = CreateExistsFilterExpression(parameter);
                return Expression.Not(existsExpression);
            }

            var method = GetOperatorMethod(@operator);

            BinaryExpression result = null;
            foreach (var value in values)
            {
                var left = CreateExpression(parameter);
                var right = Expression.Constant(value);
                var inner = method(left, right);
                result = result == null ? inner : Expression.OrElse(result, inner);
            }
            return result;
        }