mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-11-09 19:04:58 +08:00
Update merge
This commit is contained in:
@@ -247,17 +247,13 @@ namespace SqlSugar
|
|||||||
|
|
||||||
public async Task<int> BulkMergeAsync(List<T> datas, Expression<Func<T, object>> whereColumnsExp, Expression<Func<T, object>> updateColumnsExp)
|
public async Task<int> BulkMergeAsync(List<T> datas, Expression<Func<T, object>> whereColumnsExp, Expression<Func<T, object>> updateColumnsExp)
|
||||||
{
|
{
|
||||||
// 步骤:
|
|
||||||
// 1. 通过表达式获取 whereColumns 和 updateColumns 的列名数组
|
|
||||||
// 2. 调用已有的 BulkMergeAsync(List<T>, string[], string[]) 方法
|
|
||||||
|
|
||||||
// 1. 获取 whereColumns
|
// 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
|
// 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
|
// 3. 调用 BulkMergeAsync
|
||||||
return await BulkMergeAsync(datas, whereColumns?.ToArray(), updateColumns?.ToArray());
|
return await BulkMergeAsync(datas, whereColumns, updateColumns);
|
||||||
}
|
}
|
||||||
public int BulkMerge(List<T> datas, Expression<Func<T, object>> whereColumnsExp, Expression<Func<T, object>> updateColumnsExp)
|
public int BulkMerge(List<T> datas, Expression<Func<T, object>> whereColumnsExp, Expression<Func<T, object>> updateColumnsExp)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -303,7 +303,19 @@ namespace SqlSugar
|
|||||||
GetTopLevelMethodCalls(lambdaExpression.Body, methodCalls);
|
GetTopLevelMethodCalls(lambdaExpression.Body, methodCalls);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public static Dictionary<string, Expression> GetNewExpressionItemListNew(Expression lamExp)
|
||||||
|
{
|
||||||
|
var caseExp = GetLambdaExpressionBody(lamExp);
|
||||||
|
caseExp = ExpressionTool.RemoveConvert(lamExp);
|
||||||
|
if (caseExp is MemberExpression c)
|
||||||
|
{
|
||||||
|
return new Dictionary<string, Expression>() { { c.Member.Name, c } };
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return GetNewExpressionItemList(lamExp);
|
||||||
|
}
|
||||||
|
}
|
||||||
public static Dictionary<string, Expression> GetNewExpressionItemList(Expression lamExp)
|
public static Dictionary<string, Expression> GetNewExpressionItemList(Expression lamExp)
|
||||||
{
|
{
|
||||||
var caseExp = GetLambdaExpressionBody(lamExp);
|
var caseExp = GetLambdaExpressionBody(lamExp);
|
||||||
|
|||||||
Reference in New Issue
Block a user