mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-07-16 07:57:33 +08:00
Updateable Add WhereColums
This commit is contained in:
parent
1f788300b3
commit
841c5c7454
@ -124,6 +124,8 @@ namespace OrmTest.UnitTest
|
|||||||
t10.Value,
|
t10.Value,
|
||||||
"Update 10 error"
|
"Update 10 error"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
var t11 = db.Updateable<Student>().WhereColumns(it => new { it.Name }).ToSql();
|
||||||
}
|
}
|
||||||
|
|
||||||
public SqlSugarClient GetInstance()
|
public SqlSugarClient GetInstance()
|
||||||
|
@ -21,6 +21,7 @@ namespace SqlSugar
|
|||||||
public bool IsSingle { get { return this.UpdateObjs.Length == 1; } }
|
public bool IsSingle { get { return this.UpdateObjs.Length == 1; } }
|
||||||
public List<MappingColumn> MappingColumnList { get; set; }
|
public List<MappingColumn> MappingColumnList { get; set; }
|
||||||
private List<string> IgnoreColumnNameList { get; set; }
|
private List<string> IgnoreColumnNameList { get; set; }
|
||||||
|
private List<string> WhereColumnList { get; set; }
|
||||||
private bool IsOffIdentity { get; set; }
|
private bool IsOffIdentity { get; set; }
|
||||||
public MappingTableList OldMappingTableList { get; set; }
|
public MappingTableList OldMappingTableList { get; set; }
|
||||||
public bool IsAs { get; set; }
|
public bool IsAs { get; set; }
|
||||||
@ -75,6 +76,17 @@ namespace SqlSugar
|
|||||||
return new KeyValuePair<string, List<SugarParameter>>(sql, UpdateBuilder.Parameters);
|
return new KeyValuePair<string, List<SugarParameter>>(sql, UpdateBuilder.Parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IUpdateable<T> WhereColumns(Expression<Func<T, object>> columns)
|
||||||
|
{
|
||||||
|
var whereColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList();
|
||||||
|
if (this.WhereColumnList == null) this.WhereColumnList = new List<string>();
|
||||||
|
foreach (var item in whereColumns)
|
||||||
|
{
|
||||||
|
this.WhereColumnList.Add(this.Context.EntityProvider.GetDbColumnName<T>(item));
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public IUpdateable<T> UpdateColumns(Expression<Func<T, object>> columns)
|
public IUpdateable<T> UpdateColumns(Expression<Func<T, object>> columns)
|
||||||
{
|
{
|
||||||
var updateColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList();
|
var updateColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList();
|
||||||
@ -91,7 +103,8 @@ namespace SqlSugar
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IUpdateable<T> UpdateColumns(Func<string, bool> updateColumMethod) {
|
public IUpdateable<T> UpdateColumns(Func<string, bool> updateColumMethod)
|
||||||
|
{
|
||||||
List<string> primaryKeys = GetPrimaryKeys();
|
List<string> primaryKeys = GetPrimaryKeys();
|
||||||
foreach (var item in this.UpdateBuilder.DbColumnInfoList)
|
foreach (var item in this.UpdateBuilder.DbColumnInfoList)
|
||||||
{
|
{
|
||||||
@ -101,22 +114,23 @@ namespace SqlSugar
|
|||||||
item.IsPrimarykey = true;
|
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;
|
return this;
|
||||||
}
|
}
|
||||||
public IUpdateable<T> UpdateColumns(Expression<Func<T, T>> columns)
|
public IUpdateable<T> UpdateColumns(Expression<Func<T, T>> columns)
|
||||||
{
|
{
|
||||||
var expResult = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.Update);
|
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");
|
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)
|
foreach (var item in resultArray)
|
||||||
{
|
{
|
||||||
string key = SqlBuilder.GetNoTranslationColumnName(item);
|
string key = SqlBuilder.GetNoTranslationColumnName(item);
|
||||||
UpdateBuilder.SetValues.Add(new KeyValuePair<string, string>(SqlBuilder.GetTranslationColumnName(key), item));
|
UpdateBuilder.SetValues.Add(new KeyValuePair<string, string>(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;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,7 +178,7 @@ namespace SqlSugar
|
|||||||
Value = column.PropertyInfo.GetValue(item, null),
|
Value = column.PropertyInfo.GetValue(item, null),
|
||||||
DbColumnName = GetDbColumnName(column.PropertyName),
|
DbColumnName = GetDbColumnName(column.PropertyName),
|
||||||
PropertyName = column.PropertyName,
|
PropertyName = column.PropertyName,
|
||||||
PropertyType=PubMethod.GetUnderType(column.PropertyInfo),
|
PropertyType = PubMethod.GetUnderType(column.PropertyInfo),
|
||||||
TableId = i
|
TableId = i
|
||||||
};
|
};
|
||||||
if (columnInfo.PropertyType.IsEnum())
|
if (columnInfo.PropertyType.IsEnum())
|
||||||
@ -195,7 +209,7 @@ namespace SqlSugar
|
|||||||
foreach (var item in this.UpdateBuilder.DbColumnInfoList)
|
foreach (var item in this.UpdateBuilder.DbColumnInfoList)
|
||||||
{
|
{
|
||||||
if (this.UpdateBuilder.Parameters == null) this.UpdateBuilder.Parameters = new List<SugarParameter>();
|
if (this.UpdateBuilder.Parameters == null) this.UpdateBuilder.Parameters = new List<SugarParameter>();
|
||||||
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()) {
|
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));
|
{
|
||||||
|
this.UpdateBuilder.Parameters.RemoveAll(it => this.UpdateBuilder.SetValues.Any(v => (SqlBuilder.SqlParameterKeyWord + SqlBuilder.GetNoTranslationColumnName(v.Key)) == it.ParameterName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private string GetDbColumnName(string entityName)
|
private string GetDbColumnName(string entityName)
|
||||||
@ -251,6 +266,9 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
private List<string> GetPrimaryKeys()
|
private List<string> GetPrimaryKeys()
|
||||||
{
|
{
|
||||||
|
if (this.WhereColumnList.IsValuable()) {
|
||||||
|
return this.WhereColumnList;
|
||||||
|
}
|
||||||
if (this.Context.IsSystemTablesConfig)
|
if (this.Context.IsSystemTablesConfig)
|
||||||
{
|
{
|
||||||
return this.Context.DbMaintenance.GetPrimaries(this.Context.EntityProvider.GetTableName(this.EntityInfo.EntityName));
|
return this.Context.DbMaintenance.GetPrimaries(this.Context.EntityProvider.GetTableName(this.EntityInfo.EntityName));
|
||||||
|
@ -14,6 +14,12 @@ namespace SqlSugar
|
|||||||
IUpdateable<T> With(string lockString);
|
IUpdateable<T> With(string lockString);
|
||||||
IUpdateable<T> Where(bool isNoUpdateNull,bool IsOffIdentity = false);
|
IUpdateable<T> Where(bool isNoUpdateNull,bool IsOffIdentity = false);
|
||||||
IUpdateable<T> Where(Expression<Func<T, bool>> expression);
|
IUpdateable<T> Where(Expression<Func<T, bool>> expression);
|
||||||
|
/// <summary>
|
||||||
|
/// Non primary key entity update function
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="columns"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IUpdateable<T> WhereColumns(Expression<Func<T, object>> columns);
|
||||||
IUpdateable<T> UpdateColumns(Expression<Func<T, object>> columns);
|
IUpdateable<T> UpdateColumns(Expression<Func<T, object>> columns);
|
||||||
IUpdateable<T> UpdateColumns(Func<string, bool> updateColumMethod);
|
IUpdateable<T> UpdateColumns(Func<string, bool> updateColumMethod);
|
||||||
IUpdateable<T> UpdateColumns(Expression<Func<T, T>> columns);
|
IUpdateable<T> UpdateColumns(Expression<Func<T, T>> columns);
|
||||||
|
Loading…
Reference in New Issue
Block a user