Exemplo n.º 1
0
        public static ParameterExpression[] GetExpressionParameters(Expression expr)
        {
            var paramsVisitor = new ExtractParamsVisitor();

            paramsVisitor.Visit(expr);
            return(paramsVisitor.ParamsList.ToArray());
        }
Exemplo n.º 2
0
        public object Eval(string expr, IDictionary <string, object> vars)
        {
            CompiledExpression compiledExpr;

            if (!CachedExpressions.TryGetValue(expr, out compiledExpr))
            {
                var linqExpr      = Parse(expr, vars);
                var paramsVisitor = new ExtractParamsVisitor();
                paramsVisitor.Visit(linqExpr);

                compiledExpr = new CompiledExpression()
                {
                    Parameters = paramsVisitor.ParamsList.ToArray()
                };
                var lambdaExpr = Expression.Lambda(linqExpr, compiledExpr.Parameters);
                compiledExpr.Lambda = lambdaExpr.Compile();
                lock (CachedExpressions) {
                    CachedExpressions[expr] = compiledExpr;
                }
            }

            var valuesList = new List <object>();

            foreach (var paramExpr in compiledExpr.Parameters)
            {
                valuesList.Add(new LambdaParameterWrapper(vars.ContainsKey(paramExpr.Name) ? vars[paramExpr.Name] : null));
            }

            var lambdaRes = compiledExpr.Lambda.DynamicInvoke(valuesList.ToArray());

            if (lambdaRes is LambdaParameterWrapper)
            {
                lambdaRes = ((LambdaParameterWrapper)lambdaRes).Value;
            }
            return(lambdaRes);
        }
Exemplo n.º 3
0
		public static ParameterExpression[] GetExpressionParameters(Expression expr) {
			var paramsVisitor = new ExtractParamsVisitor();
			paramsVisitor.Visit(expr);
			return paramsVisitor.ParamsList.ToArray();
		}