Пример #1
0
        //HashAlgorithm hash = MD5.Create();
        public IDynamicEvaluator GetEvaluator(BuildMethod method)
        {
            IDynamicEvaluator stored;

            int key = method.GetHashCode();//Convert.ToBase64String(hash.ComputeHash(System.Text.Encoding.Unicode.GetBytes(methods.ToString())));
            if (evaluators.ContainsKey(key))
            {
                evaluators.TryGetValue(key, out stored);
            }
            else
            {
                stored = new ReflectionEvaluator(method);
                evaluators.Add(key, stored);
            }
            return stored;
        }
Пример #2
0
        private Expression EvaluateSubtree(Expression subtree)
        {
            subtree = ReflectionEvaluator.Evaluate(subtree);

            if (subtree.NodeType == ExpressionType.Constant)
            {
                // we don't want to partially evaluate constants...
                var constant       = (ConstantExpression)subtree;
                var queryableValue = constant.Value as IQueryable;
                if (queryableValue != null && queryableValue.Expression != constant)
                {
                    return(queryableValue.Expression);
                }

                return(subtree);
            }

            Expression <Func <object> > lambda = Expression.Lambda <Func <object> >(Expression.Convert(subtree, typeof(object)));
            var compiledLambda = lambda.Compile();

            return(Expression.Constant(compiledLambda(), subtree.Type));
        }
Пример #3
0
            public static Expression Evaluate(Expression node)
            {
                var evaluator = new ReflectionEvaluator();

                return(evaluator.Visit(node));
            }
Пример #4
0
 public static Expression Evaluate(Expression node)
 {
     var evaluator = new ReflectionEvaluator();
     return evaluator.Visit(node);
 }