public Expression Transform(Expression expression) { var evaluator = new SubtreeEvaluator( new Nominator(CanBeEvaluatedLocally).Nominate(expression)); return evaluator.Eval(expression); }
public Expression Transform(Expression expression) { var evaluator = new SubtreeEvaluator( new Nominator(CanBeEvaluatedLocally).Nominate(expression)); return(evaluator.Eval(expression)); }
public void TestComplexReplace() { var exp = CreateExpression(p => (p.ID == 42 || p.ID == p.ID + 12 / 3) && p.ID.ToString() == 42.ToString()); AssertExpression("(((p.ID = 42) || (p.ID = (p.ID + 4))) && (p.ID.ToString() = \"42\"))", SubtreeEvaluator.Evaluate(exp)); }
public static Expression PartialEval(Expression expression) { Nominator nominator = new Nominator(); SubtreeEvaluator evaluator = new SubtreeEvaluator(nominator.Nominate(expression)); return(evaluator.Eval(expression)); }
public void TestReplaceLocalVariable() { var id = 42; var exp = CreateExpression(p => p.ID == id); AssertExpression("(p.ID = 42)", SubtreeEvaluator.Evaluate(exp)); }
/// <summary> /// Performs evaluation & replacement of independent sub-trees /// </summary> /// <param name="expression"> The root of the expression tree. </param> /// <param name="fnCanBeEvaluated"> A function that decides whether a given expression node can be part of the local function. </param> /// <returns> A new tree with sub-trees evaluated and replaced. </returns> public static Expression PartialEval(Expression expression, Func <Expression, bool> fnCanBeEvaluated) { var nominator = new Nominator(fnCanBeEvaluated); var subtreeEvaluator = new SubtreeEvaluator(nominator.Nominate(expression)); return(subtreeEvaluator.Eval(expression)); }
/// <summary> /// Performs evaluation & replacement of independent sub-trees /// </summary> /// <param name="expression">The root of the expression tree.</param> /// <param name="fnCanBeEvaluated">A function that decides whether a given expression node can be part of the local function.</param> /// <returns>A new tree with sub-trees evaluated and replaced.</returns> private static Expression Eval(Expression expression, Func <Expression, bool> fnCanBeEvaluated) { if (fnCanBeEvaluated == null) { fnCanBeEvaluated = PartialEvaluator.CanBeEvaluatedLocally; } return(SubtreeEvaluator.Eval(Nominator.Nominate(fnCanBeEvaluated, expression), expression)); }
/// <summary> /// Performs evaluation replacement of independent sub-trees /// </summary> /// <param name="expression">The root of the expression tree.</param> /// <param name="fnCanBeEvaluated">A function that decides whether a given expression node can be part of the local function.</param> /// <returns>A new tree with sub-trees evaluated and replaced.</returns> public static Expression Eval(System.Linq.Expressions.Expression expression, Func <System.Linq.Expressions.Expression, bool> fnCanBeEvaluated) { if (fnCanBeEvaluated == null) { fnCanBeEvaluated = AtkPartialEvaluator.CanBeEvaluatedLocally; } return(SubtreeEvaluator.Eval(Nominator.Nominate(fnCanBeEvaluated, expression), expression)); }
public static Expression Eval(Expression expression, Func <Expression, bool> fnCanBeEvaluated, Func <ConstantExpression, Expression> fnPostEval) { if (fnCanBeEvaluated == null) { fnCanBeEvaluated = PartialEvaluator.CanBeEvaluatedLocally; } return(SubtreeEvaluator.Eval(Nominator.Nominate(fnCanBeEvaluated, expression), fnPostEval, expression)); }
public static Expression EvaluatePartially(Expression expression) { var nominator = new Nominator(); nominator.Visit(expression); var candidates = nominator.Candidates; var evaluator = new SubtreeEvaluator(candidates); return(evaluator.Visit(expression)); }
/// <summary> /// Performs evaluation & replacement of independent sub-trees /// </summary> /// <param name="expression">The root of the expression tree.</param> /// <param name="fnCanBeEvaluated">A function that decides whether a given expression node can be part of the local function.</param> /// <returns>A new tree with sub-trees evaluated and replaced.</returns> public static Expression PartialEval(Expression expression, Func <Expression, bool> fnCanBeEvaluated) { var nominator = new Nominator(fnCanBeEvaluated); var candidates = nominator.Nominate(expression); var subtreeEvaluator = new SubtreeEvaluator(candidates); var newExpression = subtreeEvaluator.Eval(expression); return(newExpression); }
internal static Expression Eval(HashSet <Expression> candidates, Expression expression, ref int placeholderCount) { if (candidates.Count == 0) { return(expression); } var evaluator = new SubtreeEvaluator(candidates, placeholderCount); var retval = evaluator.Visit(expression); placeholderCount = evaluator.index; return(retval); }
internal static Expression Eval(HashSet <Expression> candidates, Expression expression, ref int placeholderCount) { if (candidates.Count == 0) { return(expression); } var i = placeholderCount >= 0 ? placeholderCount : SqlConstantPlaceholderMaxIndexFinder.Find(expression) + 1; var evaluator = new SubtreeEvaluator(candidates) { index = i }; return(evaluator.Visit(expression)); }
static internal Expression Eval(HashSet <Expression> candidates, Expression expression) { var evalutator = new SubtreeEvaluator(candidates); return(evalutator.Visit(expression)); }
public static Expression PartialEval(Expression expression, Func <Expression, bool> fnCanBeEvaluated, ref int placeholderCount) { return(SubtreeEvaluator.Eval(new EvaluatorNominator(fnCanBeEvaluated).Nominate(expression), expression, ref placeholderCount)); }
/// <summary> /// <![CDATA[ /// Performs evaluation & replacement of independent sub-trees > /// ]]> /// </summary> /// <param name="expression">The root of the expression tree.</param> /// <returns>A new tree with sub-trees evaluated and replaced.</returns> public static Expression PartialEval(Expression expression) { var treeEvaluator = new SubtreeEvaluator(); return(treeEvaluator.Eval(expression)); }
/// <summary> /// Performs evaluation and replacement of independent sub-trees /// </summary> /// <param name="expression">The root of the expression tree.</param> /// <param name="fnCanBeEvaluated">A function that decides whether a given expression node can be part of the local function.</param> /// <returns>A new tree with sub-trees evaluated and replaced.</returns> public static Expression Eval(Expression expression, Func <Expression, bool> fnCanBeEvaluated) { return(SubtreeEvaluator.Eval(Nominator.Nominate(fnCanBeEvaluated, expression), expression)); }
internal static Expression Eval(HashSet<Expression> candidates, Expression expression) { var evalutator = new SubtreeEvaluator(candidates); return evalutator.Visit(expression); }
/// <summary> /// Performs evaluation & replacement of independent sub-trees /// </summary> /// <param name="expression">The root of the expression tree.</param> /// <param name="fnCanBeEvaluated">A function that decides whether a given expression node can be part of the local function.</param> /// <returns>A new tree with sub-trees evaluated and replaced.</returns> public static Expression PartialEval(Expression expression, Func <Expression, bool> fnCanBeEvaluated, TextWriter logger) { return(SubtreeEvaluator.Eval(Nominator.Nominate(fnCanBeEvaluated, expression, logger), expression, logger)); }
/// <summary> /// Performs evaluation & replacement of independent sub-trees /// </summary> /// <param name="expression"> The root of the expression tree. </param> /// <param name="fnCanBeEvaluated"> A function that decides whether a given expression node can be part of the local function. </param> /// <returns> A new tree with sub-trees evaluated and replaced. </returns> public static Expression PartialEval(Expression expression, Func<Expression, bool> fnCanBeEvaluated) { var nominator = new Nominator(fnCanBeEvaluated); var subtreeEvaluator = new SubtreeEvaluator(nominator.Nominate(expression)); return subtreeEvaluator.Eval(expression); }
public static Expression PartialEval(Expression expression) { Nominator nominator = new Nominator(); SubtreeEvaluator evaluator = new SubtreeEvaluator(nominator.Nominate(expression)); return evaluator.Eval(expression); }
public void TestReplaceClassField() { var exp = CreateExpression(p => p.ID == _sid); AssertExpression("(p.ID = 42)", SubtreeEvaluator.Evaluate(exp)); }
/// <summary> /// Performs evaluation & replacement of independent sub-trees /// </summary> /// <param name="expression">The root of the expression tree.</param> /// <param name="fnCanBeEvaluated"> /// A function that decides whether a given expression node can be part of the local /// function. /// </param> /// <returns>A new tree with sub-trees evaluated and replaced.</returns> static public Expression PartialEval(Expression expression, Func <Expression, bool> fnCanBeEvaluated) { return(SubtreeEvaluator.Eval(expression, Nominator.Nominate(fnCanBeEvaluated, expression))); }
public void TestReplaceInlineCode() { var exp = CreateExpression(p => p.ID == (12 + 30)); AssertExpression("(p.ID = 42)", SubtreeEvaluator.Evaluate(exp)); }
/// <summary> /// <![CDATA[ /// Performs evaluation & replacement of independent sub-trees > /// ]]> /// </summary> /// <param name="expression">The root of the expression tree.</param> /// <returns>A new tree with sub-trees evaluated and replaced.</returns> public static Expression PartialEval(Expression expression) { var treeEvaluator = new SubtreeEvaluator(); return treeEvaluator.Eval(expression); }
internal static Expression Eval(HashSet<Expression> candidates, Expression expression, ref int placeholderCount) { if (candidates.Count == 0) { return expression; } var i = placeholderCount >= 0 ? placeholderCount : SqlConstantPlaceholderMaxIndexFinder.Find(expression) + 1; var evaluator = new SubtreeEvaluator(candidates) { index = i }; return evaluator.Visit(expression); }