private FieldFilterTerm(AttributeDefinition attributeDefinition, FieldFilterTermOperator op, IEnumerable<object> values) { AttributeDefinition = attributeDefinition; Operator = op; Values = values; }
private FieldFilterTerm(AttributeDefinition attributeDefinition, FieldFilterTermOperator op, IEnumerable <object> values) { AttributeDefinition = attributeDefinition; Operator = op; Values = values; }
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); }
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}"); }
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}"); }
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; }