diff --git a/Src/Asp.Net/SqlServerTest/Demo/Demo2_Updateable.cs b/Src/Asp.Net/SqlServerTest/Demo/Demo2_Updateable.cs index 984e45af5..bc8899445 100644 --- a/Src/Asp.Net/SqlServerTest/Demo/Demo2_Updateable.cs +++ b/Src/Asp.Net/SqlServerTest/Demo/Demo2_Updateable.cs @@ -54,6 +54,8 @@ namespace OrmTest var result5 = db.Updateable(updateObj).WhereColumns(it => new { it.Id }).ExecuteCommand();//update single by id var result6 = db.Updateable(updateObjs).WhereColumns(it => new { it.Id }).ExecuteCommand();//update List by id + //Re set value + var result66 = db.Updateable(new List { updateObj }).ReSetValue(it => it.Id = 112).IgnoreColumns(it => new { it.CreateTime, it.Price }).ExecuteCommand(); diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/Updateable.cs b/Src/Asp.Net/SqlServerTest/UnitTest/Updateable.cs index c469c28e1..796267d46 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/Updateable.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/Updateable.cs @@ -23,9 +23,9 @@ namespace OrmTest Db.Updateable().SetColumns(it => it.BoolValue == x.BoolValue).Where(it => it.Id == 1).ExecuteCommand(); Db.Updateable().SetColumns(it => new UnitBoolTest() { BoolValue = !x.BoolValue }).Where(it => it.Id == 1).ExecuteCommand(); Db.Updateable().SetColumns(it => it.BoolValue == !x.BoolValue).Where(it => it.Id == 1).ExecuteCommand(); - Db.Updateable(x).ReSetValue(it => it.BoolValue == it.BoolValue).ExecuteCommand(); - Db.Updateable(x).ReSetValue(it => it.BoolValue == true).ExecuteCommand(); - Db.Updateable(x).ReSetValue(it => it.BoolValue == !it.BoolValue).ExecuteCommand(); + Db.Updateable(x).ReSetValue(it => it.BoolValue = it.BoolValue).ExecuteCommand(); + Db.Updateable(x).ReSetValue(it => it.BoolValue = true).ExecuteCommand(); + Db.Updateable(x).ReSetValue(it => it.BoolValue = !it.BoolValue).ExecuteCommand(); Db.Updateable(x).UpdateColumns(it => new { it.BoolValue }).ExecuteCommand(); diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index b1e619175..d7acb5613 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -181,19 +181,20 @@ namespace SqlSugar } - public IUpdateable ReSetValue(Expression> setValueExpression) + public IUpdateable ReSetValue(Action setValueExpression) { - Check.Exception(!IsSingle, "Batch operation not supported ReSetValue"); - var expResult = UpdateBuilder.GetExpressionValue(setValueExpression, ResolveExpressType.WhereSingle); - var resultString = Regex.Match(expResult.GetResultString(), @"\((.+)\)").Groups[1].Value; - LambdaExpression lambda = setValueExpression as LambdaExpression; - var expression = lambda.Body; - Check.Exception(!(expression is BinaryExpression), "Expression format error"); - Check.Exception((expression as BinaryExpression).NodeType != ExpressionType.Equal, "Expression format error"); - var leftExpression = (expression as BinaryExpression).Left; - Check.Exception(!(leftExpression is MemberExpression), "Expression format error"); - var leftResultString = UpdateBuilder.GetExpressionValue(leftExpression, ResolveExpressType.FieldSingle).GetString(); - UpdateBuilder.SetValues.Add(new KeyValuePair(leftResultString, resultString)); + ThrowUpdateByExpression(); + if (this.UpdateObjs.HasValue()) + { + var oldColumns = this.UpdateBuilder.DbColumnInfoList.Select(it => it.PropertyName).ToList(); + foreach (var item in UpdateObjs) + { + setValueExpression(item); + } + this.UpdateBuilder.DbColumnInfoList = new List(); + Init(); + this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => oldColumns.Contains(it.PropertyName)).ToList(); + } return this; } diff --git a/Src/Asp.Net/SqlSugar/Interface/IUpdateable.cs b/Src/Asp.Net/SqlSugar/Interface/IUpdateable.cs index 733deb9e7..e259690ba 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IUpdateable.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IUpdateable.cs @@ -86,7 +86,7 @@ namespace SqlSugar IUpdateable IsEnableUpdateVersionValidation(); IUpdateable EnableDiffLogEvent(object businessData = null); - IUpdateable ReSetValue(Expression> setValueExpression); + IUpdateable ReSetValue(Action setValueExpression); IUpdateable RemoveDataCache(); IUpdateable RemoveDataCache(string likeString); IUpdateable CallEntityMethod(Expression> method);