12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Linq.Expressions;
- using System.Text;
- namespace Ant.Query
- {
- class JoinQueryParameterExpressionReplacer : ExpressionVisitor
- {
- LambdaExpression _lambda;
- Expression[] _expressionSubstitutes;
- ParameterExpression _newParameterExpression;
- JoinQueryParameterExpressionReplacer(LambdaExpression lambda, Expression[] expressionSubstitutes, ParameterExpression newParameterExpression)
- {
- this._lambda = lambda;
- this._expressionSubstitutes = expressionSubstitutes;
- this._newParameterExpression = newParameterExpression;
- }
- public static LambdaExpression Replace(LambdaExpression lambda, Expression[] expressionSubstitutes, ParameterExpression newParameterExpression)
- {
- LambdaExpression ret = new JoinQueryParameterExpressionReplacer(lambda, expressionSubstitutes, newParameterExpression).Replace();
- return ret;
- }
- LambdaExpression Replace()
- {
- Expression lambdaBody = this._lambda.Body;
- Expression newBody = this.Visit(lambdaBody);
- Type delegateType = typeof(Func<,>).MakeGenericType(this._newParameterExpression.Type, lambdaBody.Type);
- LambdaExpression newLambda = Expression.Lambda(delegateType, newBody, this._newParameterExpression);
- return newLambda;
- }
- protected override Expression VisitParameter(ParameterExpression parameter)
- {
- int parameterIndex = this._lambda.Parameters.IndexOf(parameter);
- if (parameterIndex == -1)
- {
- return parameter;
- }
- return this._expressionSubstitutes[parameterIndex];
- }
- }
- }
|