public void Translate_CastMethodCallFilterExpression_ReturnsCorrectLinqExpression() { var filterExpression = FilterExpression.MethodCall(Function.Cast, FilterExpression.MemberAccess("TestObject"), FilterExpression.Constant(typeof(string))); var expression = _filterExpressionTranslator.Translate(filterExpression); var expected = GetLambdaBody(x => (string)x.TestObject); Assert.That(expression.ToString(), Is.EqualTo(expected.ToString())); }
public void Translate_IndexOfFilterExpression_ReturnsCorrectLinqExpression() { var filterExpression = FilterExpression.MethodCall(Function.IndexOf, FilterExpression.MemberAccess("TestString"), FilterExpression.Constant("hi")); var expression = _filterExpressionTranslator.Translate(filterExpression); var expected = GetLambdaBody(x => x.TestString.IndexOf("hi")); Assert.That(expression.ToString(), Is.EqualTo(expected.ToString())); }
public FilterExpression BuildExpression(Stack <Token> stack) { if (stack == null) { throw new ArgumentNullException("stack", "Cannot build function expression with a null expression stack."); } if (stack.Count < 1) { throw new ArgumentException("Cannot build function expression for function '{0}'. Not enough parameters."); } var token = stack.Pop(); if (token == null) { throw new ArgumentException("Cannot parse a null token."); } var function = token.Value.GetFromODataQueryMethodName(); var arity = function.Arity(); if (stack.Count < arity) { throw new ArgumentException(String.Format("Cannot build function expression for function '{0}'. Not enough parameters.", function)); } var arguments = new List <FilterExpression>(); for (int i = 0; i < arity; i++) { var argument = _filterExpressionParserStrategy.BuildExpression(stack); arguments.Add(argument); } arguments.Reverse(); var result = FilterExpression.MethodCall(function, arguments.ToArray()); return(result); }