示例#1
0
        public void Should_exclude_bound_parameters()
        {
            Expression <Func <int, int, int> > expr = (x, y) => x + y;

            var parameters = Scanners.FindUnboundParameters(expr);

            Assert.Empty(parameters);
        }
示例#2
0
        public void Should_include_unbound_parameters()
        {
            var param1 = Expression.Parameter(typeof(int));
            var expr   = Expression.Lambda(
                Expression.Add(
                    left: Expression.Parameter(typeof(int), "unbound"),
                    right: param1),
                param1);

            var parameters = Scanners.FindUnboundParameters(expr);

            Assert.Single(parameters, p => p.Name == "unbound");
        }
示例#3
0
 internal static ValueTask <Validation <string, Func <CancellationToken, TResult> > > CompileQuery <TSourceDescription, TResult>(
     Expression expression,
     Verifier verify,
     Authorizer <TSourceDescription> authorize,
     IReadOnlyDictionary <string, TSourceDescription> bindings,
     Func <Expression, Expression> boxingRewriter) where TSourceDescription : IQueryableSourceDescription =>
 from verified in verify(expression).ToValueTask()
 let unboundParameters = Scanners.FindUnboundParameters(expression)
                         from methodBindings in BindMethods(unboundParameters, bindings).ToValueTask()
                         from authorized in authorize(methodBindings.Values)
                         let lambdaBindings = BindLambdas(methodBindings)
                                              let syntheticParameters = new[] { Expression.Parameter(typeof(CancellationToken)) }
 from invocationBindings in BindInvocations(lambdaBindings, syntheticParameters).ToValueTask()
 let boundQuery = BindingRewriter.Rewrite(expression, invocationBindings)
                  let boxedQuery = boxingRewriter(boundQuery)
                                   select Expression.Lambda <Func <CancellationToken, TResult> >(boxedQuery, syntheticParameters).Compile();