From 637bff767ab4f9d0cb720f2218defb3652e1e426 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 20 Dec 2022 20:25:55 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20linq.dynamic=20Express?= =?UTF-8?q?ion=20Invoke=20=E8=A7=A3=E6=9E=90=EF=BC=9B#1378?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Internal/CommonExpression.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 656de788..85867997 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -931,7 +931,16 @@ namespace FreeSql.Internal return $"not({ExpressionLambdaToSql(notExp, tsc)})"; case ExpressionType.Quote: return ExpressionLambdaToSql((exp as UnaryExpression)?.Operand, tsc); case ExpressionType.Lambda: return ExpressionLambdaToSql((exp as LambdaExpression)?.Body, tsc); - case ExpressionType.Invoke: return formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams); + //case ExpressionType.Invoke: return formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams); + case ExpressionType.Invoke: + var invokeExp = exp as InvocationExpression; + var invokeReplaceVistor = new FreeSql.Internal.CommonExpression.ReplaceVisitor(); + var invokeReplaceExp = invokeExp.Expression; + var invokeLambdaExp = invokeReplaceExp as LambdaExpression; + var len = Math.Min(invokeExp.Arguments.Count, invokeLambdaExp.Parameters.Count); + for (var a = 0; a < len; a++) + invokeReplaceExp = invokeReplaceVistor.Modify(invokeReplaceExp, invokeLambdaExp.Parameters[a], invokeExp.Arguments[a]); + return ExpressionLambdaToSql(invokeReplaceExp, tsc); case ExpressionType.TypeAs: case ExpressionType.Convert: case ExpressionType.ConvertChecked: