//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; }
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)); }
public static Expression Evaluate(Expression node) { var evaluator = new ReflectionEvaluator(); return(evaluator.Visit(node)); }
public static Expression Evaluate(Expression node) { var evaluator = new ReflectionEvaluator(); return evaluator.Visit(node); }