Skip to content

Commit 637bff7

Browse files
committed
- 增加 linq.dynamic Expression Invoke 解析;#1378
1 parent 818d335 commit 637bff7

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

FreeSql/Internal/CommonExpression.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -931,7 +931,16 @@ public string ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
931931
return $"not({ExpressionLambdaToSql(notExp, tsc)})";
932932
case ExpressionType.Quote: return ExpressionLambdaToSql((exp as UnaryExpression)?.Operand, tsc);
933933
case ExpressionType.Lambda: return ExpressionLambdaToSql((exp as LambdaExpression)?.Body, tsc);
934-
case ExpressionType.Invoke: return formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams);
934+
//case ExpressionType.Invoke: return formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams);
935+
case ExpressionType.Invoke:
936+
var invokeExp = exp as InvocationExpression;
937+
var invokeReplaceVistor = new FreeSql.Internal.CommonExpression.ReplaceVisitor();
938+
var invokeReplaceExp = invokeExp.Expression;
939+
var invokeLambdaExp = invokeReplaceExp as LambdaExpression;
940+
var len = Math.Min(invokeExp.Arguments.Count, invokeLambdaExp.Parameters.Count);
941+
for (var a = 0; a < len; a++)
942+
invokeReplaceExp = invokeReplaceVistor.Modify(invokeReplaceExp, invokeLambdaExp.Parameters[a], invokeExp.Arguments[a]);
943+
return ExpressionLambdaToSql(invokeReplaceExp, tsc);
935944
case ExpressionType.TypeAs:
936945
case ExpressionType.Convert:
937946
case ExpressionType.ConvertChecked:

0 commit comments

Comments
 (0)