public void Resolve_ReplacesParameter_WithProjection () { var node = new SelectManyExpressionNode ( CreateParseInfo(), _collectionSelector, ExpressionHelper.CreateLambdaExpression<int, int, AnonymousType> ((a, b) => new AnonymousType (a, b))); node.Apply (QueryModel, ClauseGenerationContext); var clause = (FromClauseBase) QueryModel.BodyClauses[0]; var expression = ExpressionHelper.CreateLambdaExpression<AnonymousType, bool> (i => i.a > 5 && i.b > 6); var result = node.Resolve (expression.Parameters[0], expression.Body, ClauseGenerationContext); var selectManySourceReference = new QuerySourceReferenceExpression (clause); // new AnonymousType (SourceReference, selectManySourceReference).a > 5 && new AnonymousType (SourceReference, selectManySourceReference).b > 6 var newAnonymousTypeExpression = Expression.New ( typeof (AnonymousType).GetConstructor (new[] { typeof (int), typeof (int) }), SourceReference, selectManySourceReference); var anonymousTypeMemberAExpression = Expression.MakeMemberAccess (newAnonymousTypeExpression, typeof (AnonymousType).GetProperty ("a")); var anonymousTypeMemberBExpression = Expression.MakeMemberAccess (newAnonymousTypeExpression, typeof (AnonymousType).GetProperty ("b")); var expectedResult = Expression.MakeBinary ( ExpressionType.AndAlso, Expression.MakeBinary (ExpressionType.GreaterThan, anonymousTypeMemberAExpression, Expression.Constant (5)), Expression.MakeBinary (ExpressionType.GreaterThan, anonymousTypeMemberBExpression, Expression.Constant (6))); ExpressionTreeComparer.CheckAreEqualTrees (expectedResult, result); }
public override void SetUp () { base.SetUp(); _collectionSelector = ExpressionHelper.CreateLambdaExpression<int, double[]> (i => new double[1]); _resultSelector = ExpressionHelper.CreateLambdaExpression<int, int, bool> ((i, j) => i > j); _nodeWithResultSelector = new SelectManyExpressionNode (CreateParseInfo (SourceNode, "j"), _collectionSelector, _resultSelector); }
public void Initialization_WithoutResultSelector () { var nodeWithoutWithResultSelector = new SelectManyExpressionNode (CreateParseInfo (SourceNode, "j"), _collectionSelector, null); var expectedResultSelectorParameter1 = Expression.Parameter (typeof (int), "i"); var expectedResultSelectorParameter2 = Expression.Parameter (typeof (double), "j"); var expectedResultSelector = Expression.Lambda (expectedResultSelectorParameter2, expectedResultSelectorParameter1, expectedResultSelectorParameter2); ExpressionTreeComparer.CheckAreEqualTrees (expectedResultSelector, nodeWithoutWithResultSelector.ResultSelector); }