Exemplo n.º 1
0
 static PipelineBinder()
 {
     __methodCallBinder = new MethodInfoMethodCallBinder <PipelineBindingContext>();
     __methodCallBinder.Register(new AnyBinder(), AnyBinder.GetSupportedMethods());
     __methodCallBinder.Register(new AverageBinder(), AverageBinder.GetSupportedMethods());
     __methodCallBinder.Register(new CountBinder(), CountBinder.GetSupportedMethods());
     __methodCallBinder.Register(new DistinctBinder(), DistinctBinder.GetSupportedMethods());
     __methodCallBinder.Register(new FirstBinder(), FirstBinder.GetSupportedMethods());
     __methodCallBinder.Register(new GroupByBinder(), GroupByBinder.GetSupportedMethods());
     __methodCallBinder.Register(new GroupByWithResultSelectorBinder(), GroupByWithResultSelectorBinder.GetSupportedMethods());
     __methodCallBinder.Register(new JoinBinder(), JoinBinder.GetSupportedMethods());
     __methodCallBinder.Register(new MaxBinder(), MaxBinder.GetSupportedMethods());
     __methodCallBinder.Register(new MinBinder(), MinBinder.GetSupportedMethods());
     __methodCallBinder.Register(new OfTypeBinder(), OfTypeBinder.GetSupportedMethods());
     __methodCallBinder.Register(new OrderByBinder(), OrderByBinder.GetSupportedMethods());
     __methodCallBinder.Register(new SampleBinder(), SampleBinder.GetSupportedMethods());
     __methodCallBinder.Register(new SelectBinder(), SelectBinder.GetSupportedMethods());
     __methodCallBinder.Register(new SelectManyBinder(), SelectManyBinder.GetSupportedMethods());
     __methodCallBinder.Register(new SingleBinder(), SingleBinder.GetSupportedMethods());
     __methodCallBinder.Register(new SkipBinder(), SkipBinder.GetSupportedMethods());
     __methodCallBinder.Register(new StandardDeviationPopulationBinder(), StandardDeviationPopulationBinder.GetSupportedMethods());
     __methodCallBinder.Register(new StandardDeviationSampleBinder(), StandardDeviationSampleBinder.GetSupportedMethods());
     __methodCallBinder.Register(new SumBinder(), SumBinder.GetSupportedMethods());
     __methodCallBinder.Register(new TakeBinder(), TakeBinder.GetSupportedMethods());
     __methodCallBinder.Register(new ThenByBinder(), ThenByBinder.GetSupportedMethods());
     __methodCallBinder.Register(new WhereBinder(), WhereBinder.GetSupportedMethods());
 }
        public static Expression Unpack(IDictionary <string, object> packedExpression, ITypeResolver typeResolver = null, Expression global = null, Type expectedType = null)
        {
            if (packedExpression == null)
            {
                throw new ArgumentNullException("packedExpression");
            }
            if (typeResolver == null)
            {
                typeResolver = KnownTypeResolver.Default;
            }
            if (expectedType == null)
            {
                expectedType = typeof(object);
            }

            var syntaxTree      = new SyntaxTreeNode(packedExpression);
            var bindingContext  = new BindingContext(typeResolver, Constants.EmptyReadonlyParameters, expectedType, global);
            var boundExpression = default(Expression);
            var bindingError    = default(Exception);

            if (AnyBinder.TryBindInNewScope(syntaxTree, bindingContext, TypeDescription.GetTypeDescription(expectedType), out boundExpression, out bindingError) == false)
            {
                throw bindingError;
            }

            return(boundExpression);
        }
Exemplo n.º 3
0
        static EmbeddedPipelineBinder()
        {
            var infoBinder = new MethodInfoMethodCallBinder <EmbeddedPipelineBindingContext>();

            infoBinder.Register(new AllBinder(), AllBinder.GetSupportedMethods());
            infoBinder.Register(new AnyBinder(), AnyBinder.GetSupportedMethods());
            infoBinder.Register(new AverageBinder(), AverageBinder.GetSupportedMethods());
            infoBinder.Register(new DistinctBinder(), DistinctBinder.GetSupportedMethods());
            infoBinder.Register(new ExceptBinder(), ExceptBinder.GetSupportedMethods());
            infoBinder.Register(new FirstBinder(), FirstBinder.GetSupportedMethods());
            infoBinder.Register(new IntersectBinder(), IntersectBinder.GetSupportedMethods());
            infoBinder.Register(new LastBinder(), LastBinder.GetSupportedMethods());
            infoBinder.Register(new MaxBinder(), MaxBinder.GetSupportedMethods());
            infoBinder.Register(new MinBinder(), MinBinder.GetSupportedMethods());
            infoBinder.Register(new SelectBinder(), SelectBinder.GetSupportedMethods());
            infoBinder.Register(new SumBinder(), SumBinder.GetSupportedMethods());
            infoBinder.Register(new ToArrayBinder(), ToArrayBinder.GetSupportedMethods());
            infoBinder.Register(new ToHashSetBinder(), ToHashSetBinder.GetSupportedMethods());
            infoBinder.Register(new ToListBinder(), ToListBinder.GetSupportedMethods());
            infoBinder.Register(new UnionBinder(), UnionBinder.GetSupportedMethods());
            infoBinder.Register(new WhereBinder(), WhereBinder.GetSupportedMethods());

            var nameBinder = new NameBasedMethodCallBinder <EmbeddedPipelineBindingContext>();

            nameBinder.Register(new ContainsBinder(), ContainsBinder.IsSupported, ContainsBinder.SupportedMethodNames);
            nameBinder.Register(new CountBinder(), CountBinder.IsSupported, CountBinder.SupportedMethodNames);

            __methodCallBinder = new CompositeMethodCallBinder <EmbeddedPipelineBindingContext>(
                infoBinder,
                nameBinder);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Binds specified syntax tree to concrete types and optional context.
        /// </summary>
        /// <param name="node">Syntax tree. Not null.</param>
        /// <param name="global">Context expression. Can be null. Usually <see cref="Expression.Constant(object)"/>.</param>
        /// <returns></returns>
        public LambdaExpression Bind(SyntaxTreeNode node, Expression global = null)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            var bindingContext = default(BindingContext);

            // lambda binding substitution feature
            if (node.GetExpressionType(throwOnError: true) == Constants.EXPRESSION_TYPE_LAMBDA && this.resultType.IsDelegate == false)
            {
                var newParameterNames = LambdaBinder.ExtractArgumentNames(node);
                if (newParameterNames.Length != this.parameters.Count)
                {
                    throw new ExpressionParserException(Resources.EXCEPTION_BIND_UNABLEREMAPPARAMETERSCOUNTMISMATCH, node);
                }

                var newParameters = new ParameterExpression[newParameterNames.Length];
                for (var i = 0; i < newParameters.Length; i++)
                {
                    newParameters[i] = Expression.Parameter(this.parameters[i].Type, newParameterNames[i]);
                }
                bindingContext = new BindingContext(this.typeResolver, new ReadOnlyCollection <ParameterExpression>(newParameters), this.resultType, global);
                node           = node.GetExpression(throwOnError: true);
            }
            else
            {
                bindingContext = new BindingContext(this.typeResolver, this.parameters, this.resultType, global);
            }
            var body         = default(Expression);
            var bindingError = default(Exception);

            if (AnyBinder.TryBind(node, bindingContext, this.resultType, out body, out bindingError) == false)
            {
                throw bindingError;
            }

            Debug.Assert(body != null, "body != null");

            bindingContext.CompleteNullPropagation(ref body);

            if (body.Type != this.resultType && this.resultType.IsVoid == false)
            {
                try
                {
                    body = Expression.ConvertChecked(body, this.resultType);
                }
                catch (InvalidOperationException)
                {
                    throw new InvalidOperationException(string.Format(Resources.EXCEPTION_BIND_INVALIDLAMBDABODYTYPE, body.Type, this.resultType));
                }
            }

            return(Expression.Lambda(this.lambdaType, body, bindingContext.Parameters));
        }
Exemplo n.º 5
0
        static EmbeddedPipelineBinder()
        {
            var infoBinder = new MethodInfoMethodCallBinder <EmbeddedPipelineBindingContext>();

            infoBinder.Register(new AggregateBinder(), AggregateBinder.GetSupportedMethods());
            infoBinder.Register(new AllBinder(), AllBinder.GetSupportedMethods());
            infoBinder.Register(new AnyBinder(), AnyBinder.GetSupportedMethods());
            infoBinder.Register(new AsQueryableBinder(), AsQueryableBinder.GetSupportedMethods());
            infoBinder.Register(new AverageBinder(), AverageBinder.GetSupportedMethods());
            infoBinder.Register(new ConcatBinder(), ConcatBinder.GetSupportedMethods());
            infoBinder.Register(new DefaultIfEmptyBinder(), DefaultIfEmptyBinder.GetSupportedMethods());
            infoBinder.Register(new DistinctBinder(), DistinctBinder.GetSupportedMethods());
            infoBinder.Register(new ExceptBinder(), ExceptBinder.GetSupportedMethods());
            infoBinder.Register(new FirstBinder(), FirstBinder.GetSupportedMethods());
            infoBinder.Register(new IntersectBinder(), IntersectBinder.GetSupportedMethods());
            infoBinder.Register(new LastBinder(), LastBinder.GetSupportedMethods());
            infoBinder.Register(new MaxBinder(), MaxBinder.GetSupportedMethods());
            infoBinder.Register(new MinBinder(), MinBinder.GetSupportedMethods());
            infoBinder.Register(new OfTypeBinder(), OfTypeBinder.GetSupportedMethods());
            infoBinder.Register(new ReverseBinder(), ReverseBinder.GetSupportedMethods());
            infoBinder.Register(new SelectBinder(), SelectBinder.GetSupportedMethods());
            infoBinder.Register(new SkipBinder(), SkipBinder.GetSupportedMethods());
            infoBinder.Register(new StandardDeviationBinder(), StandardDeviationBinder.GetSupportedMethods());
            infoBinder.Register(new SumBinder(), SumBinder.GetSupportedMethods());
            infoBinder.Register(new TakeBinder(), TakeBinder.GetSupportedMethods());
            infoBinder.Register(new ToArrayBinder(), ToArrayBinder.GetSupportedMethods());
            infoBinder.Register(new ToHashSetBinder(), ToHashSetBinder.GetSupportedMethods());
            infoBinder.Register(new ToListBinder(), ToListBinder.GetSupportedMethods());
            infoBinder.Register(new UnionBinder(), UnionBinder.GetSupportedMethods());
            infoBinder.Register(new WhereBinder(), WhereBinder.GetSupportedMethods());
            infoBinder.Register(new ZipBinder(), ZipBinder.GetSupportedMethods());

            var nameBinder = new NameBasedMethodCallBinder <EmbeddedPipelineBindingContext>();

            nameBinder.Register(new ContainsBinder(), ContainsBinder.IsSupported, ContainsBinder.SupportedMethodNames);
            nameBinder.Register(new CountBinder(), CountBinder.IsSupported, CountBinder.SupportedMethodNames);

            __methodCallBinder = new CompositeMethodCallBinder <EmbeddedPipelineBindingContext>(
                infoBinder,
                nameBinder);
        }