using System.Collections.Generic; using System.Linq.Expressions; namespace Hncore.Infrastructure.EntitiesExtension { public class ParameterRebinder : ExpressionVisitor { private readonly Dictionary map; /// /// Default construcotr /// /// Map specification public ParameterRebinder(Dictionary map) { this.map = map ?? new Dictionary(); } /// /// Replate parameters in expression with a Map information /// /// Map information /// Expression to replace parameters /// Expression with parameters replaced public static Expression ReplaceParameters(Dictionary map, Expression exp) { return new ParameterRebinder(map).Visit(exp); } /// /// Visit pattern method /// /// A Parameter expression /// New visited expression protected override Expression VisitParameter(ParameterExpression p) { ParameterExpression replacement; if (map.TryGetValue(p, out replacement)) { p = replacement; } return base.VisitParameter(p); } } }