diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastestProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastestProvider.cs index a9f42e8c8..8dce2dd0d 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastestProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastestProvider.cs @@ -246,18 +246,14 @@ namespace SqlSugar } public async Task BulkMergeAsync(List datas, Expression> whereColumnsExp, Expression> updateColumnsExp) - { - // 步骤: - // 1. 通过表达式获取 whereColumns 和 updateColumns 的列名数组 - // 2. 调用已有的 BulkMergeAsync(List, string[], string[]) 方法 - + { // 1. 获取 whereColumns - var whereColumns =ExpressionTool.GetNewArrayMembers((whereColumnsExp as LambdaExpression).Body as NewArrayExpression); + var whereColumns =ExpressionTool.GetNewExpressionItemListNew((whereColumnsExp as LambdaExpression).Body).Select(it=>it.Key).ToArray(); // 2. 获取 updateColumns - var updateColumns = ExpressionTool.GetNewArrayMembers((updateColumnsExp as LambdaExpression).Body as NewArrayExpression); + var updateColumns = ExpressionTool.GetNewExpressionItemListNew((updateColumnsExp as LambdaExpression).Body).Select(it => it.Key).ToArray(); // 3. 调用 BulkMergeAsync - return await BulkMergeAsync(datas, whereColumns?.ToArray(), updateColumns?.ToArray()); + return await BulkMergeAsync(datas, whereColumns, updateColumns); } public int BulkMerge(List datas, Expression> whereColumnsExp, Expression> updateColumnsExp) { diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs index ffe049803..0c8dc166c 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs @@ -303,7 +303,19 @@ namespace SqlSugar GetTopLevelMethodCalls(lambdaExpression.Body, methodCalls); } } - + public static Dictionary GetNewExpressionItemListNew(Expression lamExp) + { + var caseExp = GetLambdaExpressionBody(lamExp); + caseExp = ExpressionTool.RemoveConvert(lamExp); + if (caseExp is MemberExpression c) + { + return new Dictionary() { { c.Member.Name, c } }; + } + else + { + return GetNewExpressionItemList(lamExp); + } + } public static Dictionary GetNewExpressionItemList(Expression lamExp) { var caseExp = GetLambdaExpressionBody(lamExp);