mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 修复 LambadaExpressionExtensions 扩展方法 And/Or 当存在二级 lambada 时替换错误的 bug;
> 如:where.Add(a => a.Tags.Any(b => ...)),b 替换错误
This commit is contained in:
parent
87c9ccf5c3
commit
42aa700b44
@ -34,7 +34,7 @@ namespace System.Linq.Expressions
|
||||
if (exp2 == null) return exp1;
|
||||
|
||||
ParameterExpression newParameter = Expression.Parameter(typeof(T), "c");
|
||||
NewExpressionVisitor visitor = new NewExpressionVisitor(newParameter);
|
||||
NewExpressionVisitor visitor = new NewExpressionVisitor(newParameter, exp2.Parameters.FirstOrDefault());
|
||||
|
||||
var left = visitor.Replace(exp1.Body);
|
||||
var right = visitor.Replace(exp2.Body);
|
||||
@ -62,7 +62,7 @@ namespace System.Linq.Expressions
|
||||
if (exp2 == null) return exp1;
|
||||
|
||||
ParameterExpression newParameter = Expression.Parameter(typeof(T), "c");
|
||||
NewExpressionVisitor visitor = new NewExpressionVisitor(newParameter);
|
||||
NewExpressionVisitor visitor = new NewExpressionVisitor(newParameter, exp2.Parameters.FirstOrDefault());
|
||||
|
||||
var left = visitor.Replace(exp1.Body);
|
||||
var right = visitor.Replace(exp2.Body);
|
||||
@ -90,18 +90,16 @@ namespace System.Linq.Expressions
|
||||
|
||||
internal class NewExpressionVisitor : ExpressionVisitor
|
||||
{
|
||||
public ParameterExpression _newParameter { get; private set; }
|
||||
public NewExpressionVisitor(ParameterExpression param)
|
||||
ParameterExpression _newParameter;
|
||||
ParameterExpression _oldParameter;
|
||||
public NewExpressionVisitor(ParameterExpression newParam, ParameterExpression oldParam)
|
||||
{
|
||||
this._newParameter = param;
|
||||
}
|
||||
public Expression Replace(Expression exp)
|
||||
{
|
||||
return this.Visit(exp);
|
||||
}
|
||||
protected override Expression VisitParameter(ParameterExpression node)
|
||||
{
|
||||
return this._newParameter;
|
||||
this._newParameter = newParam;
|
||||
this._oldParameter = oldParam;
|
||||
}
|
||||
public Expression Replace(Expression exp) => this.Visit(exp);
|
||||
|
||||
protected override Expression VisitParameter(ParameterExpression node) =>
|
||||
node == _oldParameter ? this._newParameter : node;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user