/// <summary> /// 获取列类型 /// </summary> /// <returns></returns> private static ColumnType GetColumnType <T>(T ModelItem, object ModelVaue, string name) { var dynGet = new Property.DynamicGet <T>(); var item = new ColumnType(); item.Name = name; var type = ModelVaue.ToStr().ToLower(); switch (type) { case "char": case "nchar": case "varchar": case "nvarchar": case "varchar2": case "nvarchar2": item.Length = dynGet.GetValue(ModelItem, "Length", true).ToStr().ToInt(0); item.Type = type; break; case "decimal": case "numeric": case "number": item.Precision = dynGet.GetValue(ModelItem, "Precision", true).ToStr().ToInt(0); item.Scale = dynGet.GetValue(ModelItem, "Scale", true).ToStr().ToInt(0); item.Type = type; break; default: item.Type = type; break; } return(item); }
/// <summary> /// 获取datatabel /// </summary> /// <typeparam name="T"></typeparam> /// <param name="db"></param> /// <returns></returns> public static DataTable GetTable <T>(DbCommand cmd, List <T> list) { var dyn = new Property.DynamicGet <T>(); var dt = new DataTable(); cmd.CommandText = string.Format("select top 1 * from {0}", typeof(T).Name); dt.Load(cmd.ExecuteReader()); dt.Clear(); list.ForEach(a => { var row = dt.NewRow(); PropertyCache.GetPropertyInfo <T>().ForEach(p => { row[p.Name] = dyn.GetValue(a, p.Name, true); }); dt.Rows.Add(row); }); return(dt); }
/// <summary> /// mysql /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> /// <returns></returns> public static string GetMySql <T>(List <T> list) { var sql = new StringBuilder(); sql.AppendFormat("insert into {0}(", typeof(T).Name); var dyn = new Property.DynamicGet <T>(); PropertyCache.GetPropertyInfo <T>().ForEach(a => { sql.AppendFormat("{0},", a.Name); }); sql.Append(")").Replace(",)", ")"); list.ForEach(a => { sql.Append("("); PropertyCache.GetPropertyInfo <T>().ForEach(b => { sql.AppendFormat("'{0}',", dyn.GetValue(a, b.Name, true)); }); sql.Append("),").Replace(",)", ")"); }); return(sql.ToStr().Substring(0, sql.ToStr().Length - 1)); }
/// <summary> /// 比对model /// </summary> /// <typeparam name="T">泛型</typeparam> /// <param name="CacheItem">缓存实体</param> /// <param name="modelItem">实体</param> /// <returns></returns> public static CompareModel <T> CompareTo <T>(T CacheItem, T modelItem) where T : class, new() { var dynGet = new Property.DynamicGet <T>(); var dynSet = new Property.DynamicSet <T>(); var result = new CompareModel <T>(); result.Item = modelItem; if (modelItem == null) { result.RemoveName.Add(dynGet.GetValue(CacheItem, "Name", true).ToStr()); result.IsDelete = true; return(result); } var type = dynGet.GetValue(modelItem, "DataType", true).ToStr(); if (type == "") { type = dynGet.GetValue(CacheItem, "DataType", true).ToStr(); } var name = dynGet.GetValue(modelItem, "Name", true).ToStr(); if (name == "") { name = dynGet.GetValue(CacheItem, "Name", true).ToStr(); result.Item = CacheItem; } foreach (var info in PropertyCache.GetPropertyInfo <T>()) { var modelValue = dynGet.GetValue(modelItem, info.Name, true); var cacheValue = dynGet.GetValue(CacheItem, info.Name, true); dynSet.SetValue(result.Item, info.Name, modelValue, true); if ((modelValue != null && cacheValue != null && modelValue.ToStr().ToLower() != cacheValue.ToStr().ToLower()) || (modelValue == null && cacheValue != null) || (modelValue != null && cacheValue == null)) { result.IsUpdate = true; switch (info.Name) { case "IsKey": { if (!(bool)modelValue) { result.RemoveKey.Add(name); } if ((bool)modelValue) { result.AddKey.Add(GetColumnType <T>(modelItem, type, name)); } break; } case "IsNull": { if (!(bool)modelValue) { result.RemoveNull.Add(GetColumnType <T>(modelItem, type, name)); } if ((bool)modelValue) { result.AddNull.Add(GetColumnType <T>(modelItem, type, name)); } break; } case "Name": { if (modelValue == null) { result.RemoveName.Add(name); } if (modelValue != null) { result.AddName.Add(GetColumnType <T>(modelItem, type, name)); } break; } case "Length": case "Precision": case "Scale": { result.Type.Add(GetColumnType <T>(modelItem, type, name)); break; } case "DataType": { result.Type.Add(GetColumnType <T>(modelItem, modelValue, name)); break; } case "Comments": { result.Comments.Add(new ColumnComments { Comments = modelValue.ToStr(), Name = name, Type = GetColumnType <T>(modelItem, type, name) }); break; } default: break; } } } return(result); }