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: