From 42aa700b443f92e759a0740590c6e1f5a8095893 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Wed, 10 Jul 2019 16:12:49 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20LambadaExpressionExten?= =?UTF-8?q?sions=20=E6=89=A9=E5=B1=95=E6=96=B9=E6=B3=95=20And/Or=20?= =?UTF-8?q?=E5=BD=93=E5=AD=98=E5=9C=A8=E4=BA=8C=E7=BA=A7=20lambada=20?= =?UTF-8?q?=E6=97=B6=E6=9B=BF=E6=8D=A2=E9=94=99=E8=AF=AF=E7=9A=84=20bug?= =?UTF-8?q?=EF=BC=9B=20>=20=E5=A6=82=EF=BC=9Awhere.Add(a=20=3D>=20a.Tags.A?= =?UTF-8?q?ny(b=20=3D>=20...))=EF=BC=8Cb=20=E6=9B=BF=E6=8D=A2=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/LambadaExpressionExtensions.cs | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/FreeSql/Extensions/LambadaExpressionExtensions.cs b/FreeSql/Extensions/LambadaExpressionExtensions.cs index ff8e9b89..9ad328ee 100644 --- a/FreeSql/Extensions/LambadaExpressionExtensions.cs +++ b/FreeSql/Extensions/LambadaExpressionExtensions.cs @@ -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; } } \ No newline at end of file