private static TResult CompileExpressionItem <TResult>(Expression expression)
        {
            var visitor = new TestExpressionVisitor();
            var body    = visitor.Visit(expression);
            var f       = Expression.Lambda <Func <TResult> >(body ?? throw new InvalidOperationException($"{nameof(body)} is null"), (IEnumerable <ParameterExpression>)null);

            return(f.Compile()());
        }
Example #2
0
        private static TResult CompileExpressionItem <TResult>(Expression expression)
        {
            var rewriter = new TestExpressionVisitor();
            var body     = rewriter.Visit(expression);
            var f        = Expression.Lambda <Func <TResult> >(body, (IEnumerable <ParameterExpression>)null);

            return(f.Compile()());
        }
Example #3
0
        public async Task SimpleVisitor()
        {
            var visitor = new TestExpressionVisitor();
            var service = TcpTestService.Create(QbservableServiceOptions.Default.Add(visitor), Observable.Range(1, 5));

            var results = await service.QueryAsync(source => from value in source
                                                   where value % 2 == 0
                                                   select value);

            QactiveAssert.AreEqual(results, OnNext(2), OnNext(4), OnCompleted <int>());
            QactiveAssert.AreEqual(visitor.Visited,
                                   Call <int>(typeof(Qbservable), "Where", Any.ExpressionOfType <IQbservable <int> >(), Any.LambdaExpression <Func <int, bool> >(Any.ParameterExpression <int>())),
                                   Any.ExpressionOfType <IQbservable <int> >(ExpressionType.Constant),
                                   Any.QuotedLambdaExpression <Func <int, bool> >(Any.ParameterExpression <int>()),
                                   Any.LambdaExpression <Func <int, bool> >(Any.ParameterExpression <int>()),
                                   Any.ExpressionOfType(ExpressionType.Equal),
                                   Any.ExpressionOfType(ExpressionType.Modulo),
                                   Any.ParameterExpression <int>(),
                                   Expression.Constant(2),
                                   Expression.Constant(0),
                                   Any.ParameterExpression <int>());
        }