private UpdateDefinition <T> GetUpdateFiled <T>(T item, Expression <Func <T, object> > field) { try { var pInfo = PropertyCache.GetPropertyInfo <T>(); var dynGet = new DynamicGet <T>(); var fieldList = new List <UpdateDefinition <T> >(); var list = (field.Body as NewExpression).Members; foreach (var temp in list) { var itemValue = dynGet.GetValue(item, temp.Name); fieldList.Add(Builders <T> .Update.Set(temp.Name, itemValue)); } return(Builders <T> .Update.Combine(fieldList)); } catch (Exception ex) { Task.Run(() => { SaveLog <T>(ex, "UpdateDefinition<T>"); }).ConfigureAwait(false); return(null); } }
/// <summary> /// model 转 insert sql /// </summary> /// <typeparam name="T">泛型</typeparam> /// <param name="model">实体</param> /// <param name="sql">sql</param> /// <param name="oracleParam">参数</param> /// <returns></returns> public static OptionModel InsertToSql <T>(T model, ConfigModel config) { var sbName = new StringBuilder(); var sbValue = new StringBuilder(); var dynGet = new DynamicGet <T>(); var list = new List <MemberInfo>(); var result = new OptionModel(); try { sbName.AppendFormat("insert into {0} (", typeof(T).Name); sbValue.Append(" values ("); PropertyCache.GetPropertyInfo <T>(config.IsPropertyCache).ForEach(p => { if (!list.Exists(a => a.Name == p.Name)) { sbName.AppendFormat("{0},", p.Name); sbValue.AppendFormat("{1}{0},", p.Name, config.Flag); var itemValue = dynGet.GetValue(model, p.Name, config.IsPropertyCache); var temp = DbProviderFactories.GetFactory(config).CreateParameter(); temp.ParameterName = p.Name; temp.Value = itemValue == null ? DBNull.Value : itemValue; result.Param.Add(temp); } }); result.Sql = string.Format("{0}) {1})", sbName.ToString().Substring(0, sbName.ToString().Length - 1) , sbValue.ToString().Substring(0, sbValue.ToString().Length - 1)); result.IsSuccess = true; return(result); } catch (Exception ex) { Task.Run(() => { if (config.SqlErrorType == SqlErrorType.Db) { DbLogTable.LogException <T>(config, ex, "InsertToSql<T>", result.Sql); } else { DbLog.LogException(config.IsOutError, config.DbType, ex, "InsertToSql<T>", result.Sql); } }); result.IsSuccess = false; return(result); } }
/// <summary> /// model 转 delete sql /// </summary> /// <typeparam name="T">泛型</typeparam> /// <param name="model">实体</param> /// <param name="sql">sql</param> /// <param name="oracleParam">参数</param> /// <returns></returns> public static OptionModel DeleteToSql <T>(DbCommand cmd, T model, ConfigModel config) { var result = new OptionModel(); var dynGet = new DynamicGet <T>(); result.IsCache = config.IsPropertyCache; var where = PrimaryKey(config, cmd, typeof(T).Name); if (where.Count == 0) { result.Message = string.Format("{0}没有主键", typeof(T).Name); result.IsSuccess = false; return(result); } try { result.Sql = string.Format("delete {0} ", typeof(T).Name); var count = 1; foreach (var item in where) { var itemValue = dynGet.GetValue(model, item, config.IsPropertyCache); if (itemValue == null) { result.IsSuccess = false; result.Message = string.Format("主键{0}值为空", item); return(result); } if (count == 1) { result.Sql = string.Format("{2} where {0}={1}{0} ", item, config.Flag, result.Sql); } else { result.Sql = string.Format("{2} and {0}={1}{0} ", item, config.Flag, result.Sql); } var temp = DbProviderFactories.GetFactory(config).CreateParameter(); temp.ParameterName = item; temp.Value = itemValue == null ? DBNull.Value : itemValue; result.Param.Add(temp); count++; } result.IsSuccess = true; return(result); } catch (Exception ex) { Task.Run(() => { if (config.SqlErrorType == SqlErrorType.Db) { DbLogTable.LogException <T>(config, ex, "UpdateToSql<T>", result.Sql); } else { DbLog.LogException <T>(config.IsOutError, config.DbType, ex, "DeleteToSql<T>", result.Sql); } }); result.IsSuccess = false; return(result); } }
/// <summary> /// model 转 update sql /// </summary> /// <typeparam name="T">泛型</typeparam> /// <param name="model">实体</param> /// <param name="sql">sql</param> /// <param name="oracleParam">参数</param> /// <returns></returns> public static OptionModel UpdateToSql <T>(T model, ConfigModel config, Expression <Func <T, object> > field = null) { var result = new OptionModel(); var dynGet = new DynamicGet <T>(); result.IsCache = config.IsPropertyCache; try { result.Sql = string.Format("update {0} set", typeof(T).Name); var pInfo = PropertyCache.GetPropertyInfo <T>(config.IsPropertyCache); if (field == null) { #region 属性 pInfo.ForEach(a => { result.Sql = string.Format("{2} {0}={1}{0},", a.Name, config.Flag, result.Sql); var itemValue = dynGet.GetValue(model, a.Name, config.IsPropertyCache); var temp = DbProviderFactories.GetFactory(config).CreateParameter(); temp.ParameterName = a.Name; temp.Value = itemValue == null ? DBNull.Value : itemValue; result.Param.Add(temp); }); #endregion } else { #region lambda (field.Body as NewExpression).Members.ToList().ForEach(a => { result.Sql = string.Format("{2} {0}={1}{0},", a.Name, config.Flag, result.Sql); var itemValue = dynGet.GetValue(model, a.Name, config.IsPropertyCache); var temp = DbProviderFactories.GetFactory(config).CreateParameter(); temp.ParameterName = a.Name; temp.Value = itemValue == null ? DBNull.Value : itemValue; result.Param.Add(temp); }); #endregion } result.Sql = result.Sql.Substring(0, result.Sql.Length - 1); result.IsSuccess = true; return(result); } catch (Exception ex) { Task.Run(() => { if (config.SqlErrorType == SqlErrorType.Db) { DbLogTable.LogException <T>(config, ex, "UpdateToSql<T>", result.Sql); } else { DbLog.LogException <T>(config.IsOutError, config.DbType, ex, "UpdateToSql<T>", result.Sql); } }); result.IsSuccess = false; return(result); } }
/// <summary> /// model 转 update list sql /// </summary> /// <typeparam name="T">泛型</typeparam> /// <param name="model">实体</param> /// <param name="sql">sql</param> /// <param name="oracleParam">参数</param> /// <returns></returns> public static OptionModel UpdateListToSql <T>(DbCommand cmd, List <T> list, ConfigModel config, Expression <Func <T, object> > field = null) { var dynGet = new DynamicGet <T>(); var result = new OptionModel(); result.IsCache = config.IsPropertyCache; var where = PrimaryKey(config, cmd, typeof(T).Name); if (where.Count == 0) { result.Message = string.Format("{0}没有主键", typeof(T).Name); result.IsSuccess = false; return(result); } try { result.table = BaseExecute.ToDataTable <T>(cmd, config, where, field); result.Sql = string.Format("update {0} set", typeof(T).Name); var pInfo = PropertyCache.GetPropertyInfo <T>(config.IsPropertyCache); if (field == null) { #region 属性 foreach (var item in pInfo) { if (where.Exists(a => a == item.Name)) { continue; } result.Sql = string.Format("{2} {0}={1}{0},", item.Name, config.Flag, result.Sql); var temp = DbProviderFactories.GetFactory(config).CreateParameter(); temp.ParameterName = item.Name; temp.SourceColumn = item.Name; result.Param.Add(temp); } #endregion } else { #region lambda foreach (var item in (field.Body as NewExpression).Members) { if (where.Exists(a => a == item.Name)) { continue; } result.Sql = string.Format("{2} {0}={1}{0},", item.Name, config.Flag, result.Sql); var temp = DbProviderFactories.GetFactory(config).CreateParameter(); temp.ParameterName = item.Name; temp.SourceColumn = item.Name; result.Param.Add(temp); } #endregion } result.Sql = result.Sql.Substring(0, result.Sql.Length - 1); var count = 1; where.ForEach(a => { if (count == 1) { result.Sql = string.Format("{2} where {0}={1}{0} ", a, config.Flag, result.Sql); } else { result.Sql = string.Format("{2} and {0}={1}{0} ", a, config.Flag, result.Sql); } var temp = DbProviderFactories.GetFactory(config).CreateParameter(); temp.ParameterName = a; temp.SourceColumn = a; result.Param.Add(temp); count++; }); result.IsSuccess = true; list.ForEach(p => { var row = result.table.NewRow(); where.ForEach(a => { row[a] = dynGet.GetValue(p, a, true); }); if (field == null) { PropertyCache.GetPropertyInfo <T>().ForEach(a => { row[a.Name] = dynGet.GetValue(p, a.Name, true); }); } else { (field.Body as NewExpression).Members.ToList().ForEach(a => { row[a.Name] = dynGet.GetValue(p, a.Name, true); }); } result.table.Rows.Add(row); }); return(result); } catch (Exception ex) { Task.Run(() => { if (config.SqlErrorType == SqlErrorType.Db) { DbLogTable.LogException <T>(config, ex, "UpdateListToSql<T>", result.Sql); } else { DbLog.LogException <T>(config.IsOutError, config.DbType, ex, "UpdateListToSql<T>", result.Sql); } }); result.IsSuccess = false; return(result); } }
/// <summary> /// model 转 update sql /// </summary> /// <typeparam name="T">泛型</typeparam> /// <param name="model">实体</param> /// <param name="sql">sql</param> /// <param name="oracleParam">参数</param> /// <returns></returns> public static OptionModel UpdateToSql <T>(DbCommand cmd, T model, ConfigModel config, Expression <Func <T, object> > field = null) { var result = new OptionModel(); var dynGet = new DynamicGet <T>(); result.IsCache = config.IsPropertyCache; var where = PrimaryKey(config, cmd, typeof(T).Name); if (where.Count == 0) { result.Message = string.Format("{0}没有主键", typeof(T).Name); result.IsSuccess = false; return(result); } try { result.Sql = string.Format("update {0} set", typeof(T).Name); var pInfo = PropertyCache.GetPropertyInfo <T>(config.IsPropertyCache); if (field == null) { #region 属性 foreach (var item in pInfo) { if (where.Exists(a => a == item.Name)) { continue; } result.Sql = string.Format("{2} {0}={1}{0},", item.Name, config.Flag, result.Sql); var itemValue = dynGet.GetValue(model, item.Name, config.IsPropertyCache); var temp = DbProviderFactories.GetFactory(config).CreateParameter(); temp.ParameterName = item.Name; temp.Value = itemValue == null ? DBNull.Value : itemValue; result.Param.Add(temp); } #endregion } else { #region lambda var list = (field.Body as NewExpression).Members; foreach (var item in list) { if (where.Exists(a => a == item.Name)) { continue; } result.Sql = string.Format("{2} {0}={1}{0},", item.Name, config.Flag, result.Sql); var itemValue = dynGet.GetValue(model, item.Name, config.IsPropertyCache); var temp = DbProviderFactories.GetFactory(config).CreateParameter(); temp.ParameterName = item.Name; temp.Value = itemValue == null ? DBNull.Value : itemValue; result.Param.Add(temp); } #endregion } result.Sql = result.Sql.Substring(0, result.Sql.Length - 1); var count = 1; foreach (var item in where) { var itemValue = dynGet.GetValue(model, item, config.IsPropertyCache); if (itemValue == null) { result.IsSuccess = false; result.Message = string.Format("主键{0}值为空", item); return(result); } if (count == 1) { result.Sql = string.Format("{2} where {0}={1}{0} ", item, config.Flag, result.Sql); } else { result.Sql = string.Format("{2} and {0}={1}{0} ", item, config.Flag, result.Sql); } var temp = DbProviderFactories.GetFactory(config).CreateParameter(); temp.ParameterName = item; temp.Value = itemValue == null ? DBNull.Value : itemValue; result.Param.Add(temp); count++; } result.IsSuccess = true; return(result); } catch (Exception ex) { Task.Run(() => { if (config.SqlErrorType == SqlErrorType.Db) { DbLogTable.LogException <T>(config, ex, "UpdateToSql<T>", result.Sql); } else { DbLog.LogException <T>(config.IsOutError, config.DbType, ex, "UpdateToSql<T>", result.Sql); } }); result.IsSuccess = false; return(result); } }