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); }
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); } }
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 + "."); }