public void EvaluateWholeQueryTree() { // ReSharper disable ConvertToConstant.Local var i = 1; // ReSharper restore ConvertToConstant.Local var source1 = ExpressionHelper.CreateQueryable <Cook> (); var source2 = ExpressionHelper.CreateQueryable <Cook> (); var query = from s1 in source1 from s2 in source2 where 2 > i + 5 select s1.ID + (1 + i); var partiallyEvaluatedExpression = PartialEvaluatingExpressionTreeVisitor.EvaluateIndependentSubtrees(query.Expression); var selectMethodCallExpression = (MethodCallExpression)partiallyEvaluatedExpression; var whereMethodCallExpression = (MethodCallExpression)selectMethodCallExpression.Arguments[0]; var selectManyMethodCallExpression = (MethodCallExpression)whereMethodCallExpression.Arguments[0]; var selectSelectorNavigator = new ExpressionTreeNavigator(selectMethodCallExpression.Arguments[1]); var wherePredicateNavigator = new ExpressionTreeNavigator(whereMethodCallExpression.Arguments[1]); var selectManyCollectionSelectorNavigator = new ExpressionTreeNavigator(selectManyMethodCallExpression.Arguments[1]); Assert.That(selectSelectorNavigator.Operand.Body.Right.Value, Is.EqualTo(2)); Assert.That(wherePredicateNavigator.Operand.Body.Value, Is.EqualTo(false)); Assert.That(selectManyCollectionSelectorNavigator.Operand.Body.Value, Is.SameAs(source2)); }
public void EvaluateWholeQueryTree_WhoseLambdasAreInMemberExpressions_InsteadOfUnaryExpressions() { var source = ExpressionHelper.CreateQueryable <Cook> (); Expression <Func <Cook, bool> > predicate = s1 => false; var queryExpression = ExpressionHelper.MakeExpression(() => source.Where(predicate)); Assert.That(((MethodCallExpression)queryExpression).Arguments[1].NodeType, Is.EqualTo(ExpressionType.MemberAccess), "Usually, this would be a UnaryExpression (Quote containing the Lambda); but we pass a MemberExpression containing the lambda."); var partiallyEvaluatedExpression = PartialEvaluatingExpressionTreeVisitor.EvaluateIndependentSubtrees(queryExpression); var whereMethodCallExpression = (MethodCallExpression)partiallyEvaluatedExpression; var wherePredicateNavigator = new ExpressionTreeNavigator(whereMethodCallExpression.Arguments[1]); var wherePredicateLambdaNavigator = new ExpressionTreeNavigator((Expression)wherePredicateNavigator.Value); Assert.That(wherePredicateLambdaNavigator.Body.Value, Is.EqualTo(false)); }
public void EvaluateWholeQueryTree_ThatDoesNotUseItsParameters() { var source = ExpressionHelper.CreateQueryable <Cook> (); var query = from s1 in source where false select 0 + int.Parse("0"); var partiallyEvaluatedExpression = PartialEvaluatingExpressionTreeVisitor.EvaluateIndependentSubtrees(query.Expression); var selectMethodCallExpression = (MethodCallExpression)partiallyEvaluatedExpression; var whereMethodCallExpression = (MethodCallExpression)selectMethodCallExpression.Arguments[0]; var selectSelectorNavigator = new ExpressionTreeNavigator(selectMethodCallExpression.Arguments[1]); var wherePredicateNavigator = new ExpressionTreeNavigator(whereMethodCallExpression.Arguments[1]); Assert.That(selectSelectorNavigator.Operand.Body.Value, Is.EqualTo(0)); Assert.That(wherePredicateNavigator.Operand.Body.Value, Is.EqualTo(false)); }
public void EvaluateWholeQueryTree_WhoseLambdasAreInMemberExpressions_InsteadOfUnaryExpressions () { var source = ExpressionHelper.CreateQueryable<Cook> (); Expression<Func<Cook, bool>> predicate = s1 => false; var queryExpression = ExpressionHelper.MakeExpression (() => source.Where (predicate)); Assert.That (((MethodCallExpression) queryExpression).Arguments[1].NodeType, Is.EqualTo (ExpressionType.MemberAccess), "Usually, this would be a UnaryExpression (Quote containing the Lambda); but we pass a MemberExpression containing the lambda."); var partiallyEvaluatedExpression = PartialEvaluatingExpressionVisitor.EvaluateIndependentSubtrees ( queryExpression, new TestEvaluatableExpressionFilter()); var whereMethodCallExpression = (MethodCallExpression) partiallyEvaluatedExpression; var wherePredicateNavigator = new ExpressionTreeNavigator (whereMethodCallExpression.Arguments[1]); var wherePredicateLambdaNavigator = new ExpressionTreeNavigator ((Expression) wherePredicateNavigator.Value); Assert.That (wherePredicateLambdaNavigator.Body.Value, Is.EqualTo (false)); }
public void EvaluateWholeQueryTree_ThatDoesNotUseItsParameters () { var source = ExpressionHelper.CreateQueryable<Cook> (); var query = from s1 in source where false select 0 + int.Parse ("0"); var partiallyEvaluatedExpression = PartialEvaluatingExpressionVisitor.EvaluateIndependentSubtrees ( query.Expression, new TestEvaluatableExpressionFilter()); var selectMethodCallExpression = (MethodCallExpression) partiallyEvaluatedExpression; var whereMethodCallExpression = (MethodCallExpression) selectMethodCallExpression.Arguments[0]; var selectSelectorNavigator = new ExpressionTreeNavigator (selectMethodCallExpression.Arguments[1]); var wherePredicateNavigator = new ExpressionTreeNavigator (whereMethodCallExpression.Arguments[1]); Assert.That (selectSelectorNavigator.Operand.Body.Value, Is.EqualTo (0)); Assert.That (wherePredicateNavigator.Operand.Body.Value, Is.EqualTo (false)); }
public void EvaluateWholeQueryTree () { // ReSharper disable ConvertToConstant.Local var i = 1; // ReSharper restore ConvertToConstant.Local var source1 = ExpressionHelper.CreateQueryable<Cook> (); var source2 = ExpressionHelper.CreateQueryable<Cook> (); var query = from s1 in source1 from s2 in source2 where 2 > i + 5 select s1.ID + (1 + i); var partiallyEvaluatedExpression = PartialEvaluatingExpressionVisitor.EvaluateIndependentSubtrees ( query.Expression, new TestEvaluatableExpressionFilter()); var selectMethodCallExpression = (MethodCallExpression) partiallyEvaluatedExpression; var whereMethodCallExpression = (MethodCallExpression) selectMethodCallExpression.Arguments[0]; var selectManyMethodCallExpression = (MethodCallExpression) whereMethodCallExpression.Arguments[0]; var selectSelectorNavigator = new ExpressionTreeNavigator (selectMethodCallExpression.Arguments[1]); var wherePredicateNavigator = new ExpressionTreeNavigator (whereMethodCallExpression.Arguments[1]); var selectManyCollectionSelectorNavigator = new ExpressionTreeNavigator (selectManyMethodCallExpression.Arguments[1]); Assert.That (selectSelectorNavigator.Operand.Body.Right.Value, Is.EqualTo (2)); Assert.That (wherePredicateNavigator.Operand.Body.Value, Is.EqualTo (false)); Assert.That (selectManyCollectionSelectorNavigator.Operand.Body.Value, Is.SameAs (source2)); }