private Parsers.DataFieldExpression parseMemberExpression(Expression expression) { Parsers.DataFieldExpression result = null; if (expression is MethodCallExpression) { var methodCallExpression = expression as MethodCallExpression; if (methodCallExpression != null) { switch (methodCallExpression.Method.Name) { case "Contains": result = createDataFieldExpression(Parsers.ConditionalOperator.Contains, methodCallExpression); break; case "StartsWith": result = createDataFieldExpression(Parsers.ConditionalOperator.StartWith, methodCallExpression); break; case "EndWith": result = createDataFieldExpression(Parsers.ConditionalOperator.EndWith, methodCallExpression); break; case "Match": result = createDataFieldExpression(Parsers.ConditionalOperator.Match, methodCallExpression); break; } } } return(result); }
private Parsers.IExpression parseBinaryExpression(Expression expression) { Parsers.IExpression result = null; BinaryExpression binaryExpression = expression as BinaryExpression; if (binaryExpression != null) { var nodeType = binaryExpression.NodeType; if (nodeType == ExpressionType.AndAlso || nodeType == ExpressionType.OrElse) { var conditionExpression = new Parsers.ConditionalExpression(); conditionExpression.Left = getExpression(binaryExpression.Left); conditionExpression.Right = getExpression(binaryExpression.Right); switch (nodeType) { case ExpressionType.AndAlso: conditionExpression.Operator = Parsers.BooleanOperator.And; break; case ExpressionType.OrElse: conditionExpression.Operator = Parsers.BooleanOperator.Or; break; } result = conditionExpression; } else { Parsers.DataFieldExpression fieldExpression = null; switch (nodeType) { case ExpressionType.Equal: fieldExpression = createDataFieldExpression(Parsers.ConditionalOperator.Equals, binaryExpression); break; case ExpressionType.NotEqual: fieldExpression = createDataFieldExpression(Parsers.ConditionalOperator.NotEquals, binaryExpression); break; case ExpressionType.LessThan: fieldExpression = createDataFieldExpression(Parsers.ConditionalOperator.Less, binaryExpression); break; case ExpressionType.LessThanOrEqual: fieldExpression = createDataFieldExpression(Parsers.ConditionalOperator.EqualsOrLess, binaryExpression); break; case ExpressionType.GreaterThan: fieldExpression = createDataFieldExpression(Parsers.ConditionalOperator.Greater, binaryExpression); break; case ExpressionType.GreaterThanOrEqual: fieldExpression = createDataFieldExpression(Parsers.ConditionalOperator.EqualsOrGereater, binaryExpression); break; } result = fieldExpression; } } return(result); }
private Parsers.DataFieldExpression createDataFieldExpression(Parsers.ConditionalOperator @operator, MethodCallExpression expression) { var result = new Parsers.DataFieldExpression() { Operator = @operator }; Type type; object constant = null; string fieldName = getFieldName(expression.Object, out type); constant = getConstantValue(expression.Arguments.First()); result.DataFieldType = type; result.DataFieldName = fieldName; result.Value = constant; return(result); }
private Parsers.DataFieldExpression createDataFieldExpression(Parsers.ConditionalOperator @operator, BinaryExpression expression) { var result = new Parsers.DataFieldExpression() { Operator = @operator }; Type type; object constant = null; string fieldName = getFieldName(expression.Left, out type); if (fieldName == null) { fieldName = getFieldName(expression.Right, out type); constant = getConstantValue(expression.Left); } else { constant = getConstantValue(expression.Right); } result.DataFieldType = type; result.DataFieldName = fieldName; result.Value = constant; return(result); }
private Parsers.DataFieldExpression createDataFieldExpression(Parsers.ConditionalOperator @operator, BinaryExpression expression) { var result = new Parsers.DataFieldExpression() { Operator = @operator }; Type type; object constant = null; string fieldName = getFieldName(expression.Left, out type); if (fieldName == null) { fieldName = getFieldName(expression.Right, out type); constant = getConstantValue(expression.Left); } else { constant = getConstantValue(expression.Right); } result.DataFieldType = type; result.DataFieldName = fieldName; result.Value = constant; return result; }
private Parsers.DataFieldExpression createDataFieldExpression(Parsers.ConditionalOperator @operator, MethodCallExpression expression) { var result = new Parsers.DataFieldExpression() { Operator = @operator }; Type type; object constant = null; string fieldName = getFieldName(expression.Object, out type); constant = getConstantValue(expression.Arguments.First()); result.DataFieldType = type; result.DataFieldName = fieldName; result.Value = constant; return result; }