public Model2Sql Model2SQL <T>(Model2Db sqlType, object model) { CheckKey <T>(); Model2Sql sqlObject = new Model2Sql(); sqlObject.SqlType = sqlType; string tableName = ReflectionHelper.GetTypeName <T>(); List <PropertyInfo> keys = ReflectionHelper.GetKeys <T>(); List <PropertyInfo> objectKeys = ReflectionHelper.GetObjectKeys(keys, model); if (!objectKeys.Any()) { throw new ArgumentException("匿名类中不包括表主键"); } switch (sqlType) { case Model2Db.Add: break; case Model2Db.Delete: sqlObject.Sql = string.Format("DELETE FROM {0} WHERE {1}", tableName, CreatWhere(keys)); PropertyAdd2Param(model, sqlObject, objectKeys); break; case Model2Db.Update: List <PropertyInfo> nonKeys = ReflectionHelper.GetPropertysExceptBy(ReflectionHelper.GetPropertys(model), keys); sqlObject.Sql = string.Format("UPDATE {0} {1} WHERE {2}", tableName, CreateUpdate(nonKeys), CreatWhere(keys)); PropertyAdd2Param(model, sqlObject, nonKeys); PropertyAdd2Param(model, sqlObject, objectKeys); break; case Model2Db.Query: sqlObject.Sql = string.Format("SELECT {0} FROM {1} WHERE {2}", CreateQuery <T>(), tableName, CreatWhere(objectKeys)); PropertyAdd2Param(model, sqlObject, objectKeys); break; default: break; } return(sqlObject); }
/// <summary> /// 将IQuery查询条件转化为sql语句 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="query"></param> /// <returns></returns> public Model2Sql Model2SQL <T>(Model2Db model, IQuery query) { if (model != Model2Db.Count) { throw new ArgumentException("不支持此类型"); } CheckKey <T>(); List <PropertyInfo> keys = ReflectionHelper.GetKeys <T>(); IOrder order = new Order(); foreach (var item in keys) { order.Add(item.Name, OrderDirection.Desc); } Model2Sql sqlObject = GetQuerySQL <T>(query); sqlObject.Sql = String.Format("SELECT COUNT(*) FROM {0} WHERE {1} ORDER BY {2}", ReflectionHelper.GetTypeName <T>(), sqlObject.Sql, GetOrderSQL <T>(order).Sql); return(sqlObject); }
public Model2Sql Model2SQL <T>(Model2Db sqlType, T model) { switch (sqlType) { case Model2Db.Add: case Model2Db.Delete: case Model2Db.Update: if (model == null) { throw new ArgumentException("模型不能为null"); } break; case Model2Db.Query: case Model2Db.Count: break; default: break; } CheckKey <T>(); Model2Sql sqlObject = new Model2Sql(); sqlObject.SqlType = sqlType; List <PropertyInfo> keys = ReflectionHelper.GetKeys <T>(); List <PropertyInfo> nonKeys = ReflectionHelper.GetNonKey <T>(); string tableName = ReflectionHelper.GetTypeName <T>(); switch (sqlType) { case Model2Db.Add: sqlObject.Sql = string.Format("INSERT INTO {0} ({1}) VALUES (@{2})", tableName, string.Join(",", ReflectionHelper.GetPropertys <T>().Select(p => p.Name).ToArray()), string.Join(",@", ReflectionHelper.GetPropertys <T>().Select(p => p.Name).ToArray())); ReflectionHelper.GetPropertys <T>().ToList().ForEach((p) => { sqlObject.Param.Add("@" + p.Name, p.GetValue(model)); }); break; case Model2Db.Delete: sqlObject.Sql = string.Format("DELETE FROM {0} WHERE {1}", tableName, CreatWhere(keys)); PropertyAdd2Param <T>(model, sqlObject, keys); break; case Model2Db.Update: sqlObject.Sql = string.Format("UPDATE {0} {1} WHERE {2}", tableName, CreateUpdate(nonKeys), CreatWhere(keys)); PropertyAdd2Param <T>(model, sqlObject, nonKeys); PropertyAdd2Param <T>(model, sqlObject, keys); break; case Model2Db.Query: IOrder order = new Order(); foreach (var item in keys) { order.Add(item.Name, OrderDirection.Desc); } sqlObject.Sql = string.Format("SELECT {0} FROM {1} ORDER BY {2}", CreateQuery <T>(), tableName, GetOrderSQL <T>(order).Sql); break; case Model2Db.Count: sqlObject.Sql = string.Format("SELECT COUNT(*) FROM {0}", tableName); break; default: break; } return(sqlObject); }