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