From 841c5c74544bc79b28fff1baf42d62ccfada89ce Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 5 Aug 2017 13:39:32 +0800 Subject: [PATCH] Updateable Add WhereColums --- Src/Asp.Net/MySqlTest/UnitTest/Update.cs | 2 ++ .../UpdateProvider/UpdateableProvider.cs | 36 ++++++++++++++----- Src/Asp.Net/SqlSugar/Interface/IUpdateable.cs | 6 ++++ 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/Src/Asp.Net/MySqlTest/UnitTest/Update.cs b/Src/Asp.Net/MySqlTest/UnitTest/Update.cs index ae459a336..bcf20a269 100644 --- a/Src/Asp.Net/MySqlTest/UnitTest/Update.cs +++ b/Src/Asp.Net/MySqlTest/UnitTest/Update.cs @@ -124,6 +124,8 @@ namespace OrmTest.UnitTest t10.Value, "Update 10 error" ); + + var t11 = db.Updateable().WhereColumns(it => new { it.Name }).ToSql(); } public SqlSugarClient GetInstance() diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index c96912441..1e8448c48 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -21,6 +21,7 @@ namespace SqlSugar public bool IsSingle { get { return this.UpdateObjs.Length == 1; } } public List MappingColumnList { get; set; } private List IgnoreColumnNameList { get; set; } + private List WhereColumnList { get; set; } private bool IsOffIdentity { get; set; } public MappingTableList OldMappingTableList { get; set; } public bool IsAs { get; set; } @@ -75,6 +76,17 @@ namespace SqlSugar return new KeyValuePair>(sql, UpdateBuilder.Parameters); } + public IUpdateable WhereColumns(Expression> columns) + { + var whereColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList(); + if (this.WhereColumnList == null) this.WhereColumnList = new List(); + foreach (var item in whereColumns) + { + this.WhereColumnList.Add(this.Context.EntityProvider.GetDbColumnName(item)); + } + return this; + } + public IUpdateable UpdateColumns(Expression> columns) { var updateColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList(); @@ -91,7 +103,8 @@ namespace SqlSugar return this; } - public IUpdateable UpdateColumns(Func updateColumMethod) { + public IUpdateable UpdateColumns(Func updateColumMethod) + { List primaryKeys = GetPrimaryKeys(); foreach (var item in this.UpdateBuilder.DbColumnInfoList) { @@ -101,22 +114,23 @@ namespace SqlSugar item.IsPrimarykey = true; } } - this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => updateColumMethod(it.PropertyName) || it.IsPrimarykey ||it.IsIdentity).ToList(); + this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => updateColumMethod(it.PropertyName) || it.IsPrimarykey || it.IsIdentity).ToList(); return this; } public IUpdateable UpdateColumns(Expression> columns) { var expResult = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.Update); - var resultArray=expResult.GetResultArray(); + var resultArray = expResult.GetResultArray(); Check.ArgumentNullException(resultArray, "UpdateColumns Parameter error, UpdateColumns(it=>new T{ it.id=1}) is valid, UpdateColumns(it=>T) is error"); - if (resultArray.IsValuable()) { + if (resultArray.IsValuable()) + { foreach (var item in resultArray) { string key = SqlBuilder.GetNoTranslationColumnName(item); UpdateBuilder.SetValues.Add(new KeyValuePair(SqlBuilder.GetTranslationColumnName(key), item)); } } - this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => UpdateBuilder.SetValues.Any(v=> SqlBuilder.GetNoTranslationColumnName(v.Key) ==it.DbColumnName) || it.IsPrimarykey == true).ToList(); + this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key) == it.DbColumnName) || it.IsPrimarykey == true).ToList(); return this; } @@ -164,7 +178,7 @@ namespace SqlSugar Value = column.PropertyInfo.GetValue(item, null), DbColumnName = GetDbColumnName(column.PropertyName), PropertyName = column.PropertyName, - PropertyType=PubMethod.GetUnderType(column.PropertyInfo), + PropertyType = PubMethod.GetUnderType(column.PropertyInfo), TableId = i }; if (columnInfo.PropertyType.IsEnum()) @@ -195,7 +209,7 @@ namespace SqlSugar foreach (var item in this.UpdateBuilder.DbColumnInfoList) { if (this.UpdateBuilder.Parameters == null) this.UpdateBuilder.Parameters = new List(); - this.UpdateBuilder.Parameters.Add(new SugarParameter(this.SqlBuilder.SqlParameterKeyWord + item.DbColumnName, item.Value,item.PropertyType)); + this.UpdateBuilder.Parameters.Add(new SugarParameter(this.SqlBuilder.SqlParameterKeyWord + item.DbColumnName, item.Value, item.PropertyType)); } } @@ -225,8 +239,9 @@ namespace SqlSugar } }); } - if (this.UpdateBuilder.Parameters.IsValuable()&&this.UpdateBuilder.SetValues.IsValuable()) { - this.UpdateBuilder.Parameters.RemoveAll(it => this.UpdateBuilder.SetValues.Any(v =>(SqlBuilder.SqlParameterKeyWord+SqlBuilder.GetNoTranslationColumnName(v.Key)) == it.ParameterName)); + if (this.UpdateBuilder.Parameters.IsValuable() && this.UpdateBuilder.SetValues.IsValuable()) + { + this.UpdateBuilder.Parameters.RemoveAll(it => this.UpdateBuilder.SetValues.Any(v => (SqlBuilder.SqlParameterKeyWord + SqlBuilder.GetNoTranslationColumnName(v.Key)) == it.ParameterName)); } } private string GetDbColumnName(string entityName) @@ -251,6 +266,9 @@ namespace SqlSugar } private List GetPrimaryKeys() { + if (this.WhereColumnList.IsValuable()) { + return this.WhereColumnList; + } if (this.Context.IsSystemTablesConfig) { return this.Context.DbMaintenance.GetPrimaries(this.Context.EntityProvider.GetTableName(this.EntityInfo.EntityName)); diff --git a/Src/Asp.Net/SqlSugar/Interface/IUpdateable.cs b/Src/Asp.Net/SqlSugar/Interface/IUpdateable.cs index 4697ece81..1304fbee5 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IUpdateable.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IUpdateable.cs @@ -14,6 +14,12 @@ namespace SqlSugar IUpdateable With(string lockString); IUpdateable Where(bool isNoUpdateNull,bool IsOffIdentity = false); IUpdateable Where(Expression> expression); + /// + /// Non primary key entity update function + /// + /// + /// + IUpdateable WhereColumns(Expression> columns); IUpdateable UpdateColumns(Expression> columns); IUpdateable UpdateColumns(Func updateColumMethod); IUpdateable UpdateColumns(Expression> columns);