mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-05-02 20:02:47 +08:00
4.2.3.1
This commit is contained in:
parent
2d0d68f7cf
commit
25f025fd78
@ -302,7 +302,7 @@ namespace SqlSugar
|
||||
}
|
||||
public virtual Double GetDouble(string sql, params SugarParameter[] parameters)
|
||||
{
|
||||
return Convert.ToDouble(GetScalar(sql, parameters));
|
||||
return GetScalar(sql, parameters).ObjToMoney();
|
||||
}
|
||||
public virtual Double GetDouble(string sql, List<SugarParameter> parameters)
|
||||
{
|
||||
@ -321,7 +321,7 @@ namespace SqlSugar
|
||||
}
|
||||
public virtual decimal GetDecimal(string sql, params SugarParameter[] parameters)
|
||||
{
|
||||
return Convert.ToDecimal(GetScalar(sql, parameters));
|
||||
return GetScalar(sql, parameters).ObjToDecimal();
|
||||
}
|
||||
public virtual decimal GetDecimal(string sql, List<SugarParameter> parameters)
|
||||
{
|
||||
@ -340,7 +340,7 @@ namespace SqlSugar
|
||||
}
|
||||
public virtual DateTime GetDateTime(string sql, params SugarParameter[] parameters)
|
||||
{
|
||||
return Convert.ToDateTime(GetScalar(sql, parameters));
|
||||
return GetScalar(sql, parameters).ObjToDate();
|
||||
}
|
||||
public virtual DateTime GetDateTime(string sql, List<SugarParameter> parameters)
|
||||
{
|
||||
|
@ -58,12 +58,22 @@ namespace SqlSugar
|
||||
foreach (var deleteObj in deleteObjs)
|
||||
{
|
||||
var entityPropertyName = this.Context.EntityProvider.GetPropertyName<T>(primaryField);
|
||||
var columnInfo = EntityInfo.Columns.Single(it => it.PropertyName.Equals(entityPropertyName,StringComparison.CurrentCultureIgnoreCase));
|
||||
var columnInfo = EntityInfo.Columns.Single(it => it.PropertyName.Equals(entityPropertyName, StringComparison.CurrentCultureIgnoreCase));
|
||||
var value = columnInfo.PropertyInfo.GetValue(deleteObj, null);
|
||||
primaryKeyValues.Add(value);
|
||||
}
|
||||
var inValueString = primaryKeyValues.ToArray().ToJoinSqlInVals();
|
||||
Where(string.Format(DeleteBuilder.WhereInTemplate, SqlBuilder.GetTranslationColumnName(primaryFields.Single()), inValueString));
|
||||
if (primaryKeyValues.Count < 10000)
|
||||
{
|
||||
var inValueString = primaryKeyValues.ToArray().ToJoinSqlInVals();
|
||||
Where(string.Format(DeleteBuilder.WhereInTemplate, SqlBuilder.GetTranslationColumnName(primaryFields.Single()), inValueString));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DeleteBuilder.BigDataInValues == null)
|
||||
DeleteBuilder.BigDataInValues = new List<object>();
|
||||
DeleteBuilder.BigDataInValues.AddRange(primaryKeyValues);
|
||||
DeleteBuilder.BigDataFiled = primaryField;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -159,7 +169,17 @@ namespace SqlSugar
|
||||
string primaryField = null;
|
||||
primaryField = GetPrimaryKeys().FirstOrDefault();
|
||||
Check.ArgumentNullException(primaryField, "Table " + tableName + " with no primarykey");
|
||||
Where(string.Format(DeleteBuilder.WhereInTemplate, SqlBuilder.GetTranslationColumnName(primaryField), primaryKeyValues.ToJoinSqlInVals()));
|
||||
if (primaryKeyValues.Length < 10000)
|
||||
{
|
||||
Where(string.Format(DeleteBuilder.WhereInTemplate, SqlBuilder.GetTranslationColumnName(primaryField), primaryKeyValues.ToJoinSqlInVals()));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DeleteBuilder.BigDataInValues == null)
|
||||
DeleteBuilder.BigDataInValues = new List<object>();
|
||||
DeleteBuilder.BigDataInValues.AddRange(primaryKeyValues.Select(it=>(object)it));
|
||||
DeleteBuilder.BigDataFiled = primaryField;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -100,7 +100,11 @@ namespace SqlSugar
|
||||
return mappingInfo == null ? dbColumnName : mappingInfo.DbColumnName;
|
||||
}
|
||||
}
|
||||
|
||||
public PropertyInfo GetProperty<T>(string dbColumnName)
|
||||
{
|
||||
var propertyName = GetPropertyName<T>(dbColumnName);
|
||||
return typeof(T).GetProperties().First(it => it.Name == propertyName);
|
||||
}
|
||||
#region Primary key
|
||||
private static void SetColumns(EntityInfo result)
|
||||
{
|
||||
|
@ -45,7 +45,7 @@ namespace SqlSugar
|
||||
RestoreMapping();
|
||||
return new KeyValuePair<string, List<SugarParameter>>(sql, InsertBuilder.Parameters);
|
||||
}
|
||||
public int ExecuteReutrnIdentity()
|
||||
public int ExecuteReturnIdentity()
|
||||
{
|
||||
InsertBuilder.IsReturnIdentity = true;
|
||||
PreToSql();
|
||||
@ -53,6 +53,17 @@ namespace SqlSugar
|
||||
RestoreMapping();
|
||||
return Ado.GetInt(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
|
||||
}
|
||||
public T ExecuteReturnEntity()
|
||||
{
|
||||
var result = InsertObjs.First();
|
||||
var identityKeys=GetIdentityKeys();
|
||||
if (identityKeys.Count == 0) return result;
|
||||
var idValue = ExecuteReturnIdentity();
|
||||
Check.Exception(identityKeys.Count > 1, "ExecuteReutrnEntity does not support multiple identity keys");
|
||||
var identityKey = identityKeys.First();
|
||||
this.Context.EntityProvider.GetProperty<T>(identityKey).SetValue(result,idValue,null);
|
||||
return result;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Setting
|
||||
@ -79,7 +90,7 @@ namespace SqlSugar
|
||||
|
||||
public IInsertable<T> InsertColumns(Expression<Func<T, object>> columns)
|
||||
{
|
||||
var ignoreColumns = InsertBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it=>this.SqlBuilder.GetNoTranslationColumnName(it)).ToList();
|
||||
var ignoreColumns = InsertBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList();
|
||||
this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => ignoreColumns.Contains(it.PropertyName)).ToList();
|
||||
return this;
|
||||
}
|
||||
|
@ -28,6 +28,8 @@ namespace SqlSugar
|
||||
}
|
||||
set { _WhereInfos = value; }
|
||||
}
|
||||
public virtual List<object> BigDataInValues { get; set; }
|
||||
public virtual string BigDataFiled { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Sql Template
|
||||
@ -115,7 +117,29 @@ namespace SqlSugar
|
||||
}
|
||||
public virtual string ToSqlString()
|
||||
{
|
||||
return string.Format(SqlTemplate, GetTableNameString, GetWhereString);
|
||||
if (this.BigDataInValues.IsNullOrEmpty())
|
||||
{
|
||||
return string.Format(SqlTemplate, GetTableNameString, GetWhereString);
|
||||
}
|
||||
else//big data
|
||||
{
|
||||
var whereString = GetWhereString;
|
||||
var sql = string.Format(SqlTemplate, GetTableNameString, whereString);
|
||||
sql += whereString.IsNullOrEmpty() ? " WHERE " : " AND ";
|
||||
StringBuilder batchDeleteSql = new StringBuilder();
|
||||
int pageSize = 1000;
|
||||
int pageIndex = 1;
|
||||
int totalRecord = this.BigDataInValues.Count;
|
||||
int pageCount = (totalRecord + pageSize - 1) / pageSize;
|
||||
while (pageCount >= pageIndex)
|
||||
{
|
||||
var inValues = this.BigDataInValues.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
|
||||
batchDeleteSql.Append(sql+string.Format(WhereInTemplate,BigDataFiled,inValues.ToArray().ToJoinSqlInVals()));
|
||||
batchDeleteSql.Append(";");
|
||||
pageIndex++;
|
||||
}
|
||||
return batchDeleteSql.ToString();
|
||||
}
|
||||
}
|
||||
public virtual ExpressionResult GetExpressionValue(Expression expression, ResolveExpressType resolveType)
|
||||
{
|
||||
|
@ -306,7 +306,7 @@ namespace SqlSugar
|
||||
return string.Format(
|
||||
this.JoinTemplate,
|
||||
joinInfo.JoinType.ToString() + PubConst.Space,
|
||||
joinInfo.TableName + PubConst.Space,
|
||||
Builder.GetTranslationTableName(joinInfo.TableName) + PubConst.Space,
|
||||
joinInfo.ShortName + PubConst.Space + joinInfo.TableWithString,
|
||||
joinInfo.JoinWhere);
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ namespace SqlSugar
|
||||
public bool IsSingle { get { return this.UpdateObjs.Length == 1; } }
|
||||
public List<MappingColumn> MappingColumnList { get; set; }
|
||||
private List<string> IgnoreColumnNameList { get; set; }
|
||||
private List<string> 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<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)
|
||||
{
|
||||
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<T> UpdateColumns(Func<string, bool> updateColumMethod) {
|
||||
public IUpdateable<T> UpdateColumns(Func<string, bool> updateColumMethod)
|
||||
{
|
||||
List<string> 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<T> UpdateColumns(Expression<Func<T, T>> 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<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;
|
||||
}
|
||||
|
||||
@ -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<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()) {
|
||||
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<string> GetPrimaryKeys()
|
||||
{
|
||||
if (this.WhereColumnList.IsValuable()) {
|
||||
return this.WhereColumnList;
|
||||
}
|
||||
if (this.Context.IsSystemTablesConfig)
|
||||
{
|
||||
return this.Context.DbMaintenance.GetPrimaries(this.Context.EntityProvider.GetTableName(this.EntityInfo.EntityName));
|
||||
|
@ -188,7 +188,8 @@ namespace SqlSugar
|
||||
{
|
||||
value = value.Replace(":{}", ":null");
|
||||
}
|
||||
return JsonConvert.DeserializeObject<T>(value);
|
||||
var jSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
|
||||
return JsonConvert.DeserializeObject<T>(value,jSetting);
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
@ -8,6 +8,7 @@ namespace SqlSugar
|
||||
public class ExpressionResult
|
||||
{
|
||||
public bool IsLockCurrentParameter { get; set; }
|
||||
public bool IsUpper { get; set; }
|
||||
private ExpressionParameter _CurrentParameter;
|
||||
public ExpressionParameter CurrentParameter
|
||||
{
|
||||
@ -55,22 +56,32 @@ namespace SqlSugar
|
||||
public string GetString()
|
||||
{
|
||||
if (_Result == null) return null;
|
||||
return _Result.ToString().TrimEnd(',');
|
||||
if (IsUpper)
|
||||
return _Result.ToString().ToUpper().TrimEnd(',');
|
||||
else
|
||||
return _Result.ToString().TrimEnd(',');
|
||||
}
|
||||
#region functions
|
||||
public string[] GetResultArray()
|
||||
{
|
||||
if (this._Result == null) return null;
|
||||
return this.Result.ToString().TrimEnd(',').Split(',');
|
||||
if (IsUpper)
|
||||
return this.Result.ToString().ToUpper().TrimEnd(',').Split(',');
|
||||
else
|
||||
return this.Result.ToString().TrimEnd(',').Split(',');
|
||||
}
|
||||
|
||||
public string GetResultString()
|
||||
{
|
||||
if (this._Result == null) return null;
|
||||
if (this._ResolveExpressType.IsIn(ResolveExpressType.SelectMultiple, ResolveExpressType.SelectSingle)) {
|
||||
if (this._ResolveExpressType.IsIn(ResolveExpressType.SelectMultiple, ResolveExpressType.SelectSingle))
|
||||
{
|
||||
return this.Result.ToString().TrimEnd(',');
|
||||
}
|
||||
return this.Result.ToString();
|
||||
if (IsUpper)
|
||||
return this.Result.ToString().ToUpper();
|
||||
else
|
||||
return this.Result.ToString();
|
||||
}
|
||||
|
||||
public void TrimEnd()
|
||||
|
@ -154,6 +154,15 @@ namespace SqlSugar
|
||||
get; set;
|
||||
}
|
||||
|
||||
///// <summary>
|
||||
///// 如果类库是.NET 4.5请删除该属性
|
||||
///// If the SqlSugar library is.NET 4.5, delete the property
|
||||
///// </summary>
|
||||
//public override DataRowVersion SourceVersion
|
||||
//{
|
||||
// get; set;
|
||||
//}
|
||||
|
||||
public override void ResetDbType()
|
||||
{
|
||||
this.DbType = System.Data.DbType.String;
|
||||
|
@ -67,7 +67,14 @@ namespace SqlSugar
|
||||
{
|
||||
foreach (var item in inValueIEnumerable)
|
||||
{
|
||||
inValues.Add(item);
|
||||
if (item != null && item.GetType().IsEnum())
|
||||
{
|
||||
inValues.Add(Convert.ToInt64(item));
|
||||
}
|
||||
else
|
||||
{
|
||||
inValues.Add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
var value = model.Args[1].MemberName;
|
||||
|
@ -14,6 +14,12 @@ namespace SqlSugar
|
||||
IUpdateable<T> With(string lockString);
|
||||
IUpdateable<T> Where(bool isNoUpdateNull,bool IsOffIdentity = false);
|
||||
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(Func<string, bool> updateColumMethod);
|
||||
IUpdateable<T> UpdateColumns(Expression<Func<T, T>> columns);
|
||||
|
@ -10,7 +10,8 @@ namespace SqlSugar
|
||||
public interface IInsertable<T>
|
||||
{
|
||||
int ExecuteCommand();
|
||||
int ExecuteReutrnIdentity();
|
||||
int ExecuteReturnIdentity();
|
||||
T ExecuteReturnEntity();
|
||||
IInsertable<T> AS(string tableName);
|
||||
IInsertable<T> With(string lockString);
|
||||
IInsertable<T> InsertColumns(Expression<Func<T, object>> columns);
|
||||
|
@ -38,7 +38,7 @@ namespace SqlSugar
|
||||
}
|
||||
public int InsertReturnIdentity<T>(T insertObj) where T : class, new()
|
||||
{
|
||||
return this.Context.Insertable(insertObj).ExecuteReutrnIdentity();
|
||||
return this.Context.Insertable(insertObj).ExecuteReturnIdentity();
|
||||
}
|
||||
public bool InsertRange<T>(T[] insertObjs) where T : class, new()
|
||||
{
|
||||
|
@ -2,7 +2,7 @@
|
||||
<package >
|
||||
<metadata>
|
||||
<id>sqlSugarCore</id>
|
||||
<version>4.2.2.4</version>
|
||||
<version>4.2.3.1</version>
|
||||
<authors>sunkaixuan</authors>
|
||||
<owners>Landa</owners>
|
||||
<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>
|
||||
|
Loading…
Reference in New Issue
Block a user