自定义ORMapping―动态生成SQL语句(三)

2015-01-27 05:59:43 · 作者: · 浏览: 24
e from {0} where {1}", strTableName, w.ToSqlString()); } else { sb.AppendFormat("delete from {0}", strTableName); } return SQLHelper.GetInstance().ExecuteNonQuery(sb.ToString(), CommandType.Text); } #endregion #region 查询 /// /// 无条件,无排序的查询 /// /// lambda表达式 /// 集合 public static List Load() { return Load(null,null); } /// /// 有条件,无排序的查询 /// /// lambda表达式 /// 集合 public static List Load(Action whereSqlClauseBuilder) { return Load(whereSqlClauseBuilder, null); } /// /// 无条件,有排序的查询 /// /// lambda表达式 /// 集合 public static List Load(Action orderBySqlClauseBuilder) { return Load(null, orderBySqlClauseBuilder); } /// /// 有条件,有排序的查询 /// /// whereSqlClauseBuilder /// orderBySqlClauseBuilder /// 集合 public static List Load(Action whereSqlClauseBuilder, Action orderBySqlClauseBuilder) { StringBuilder sb = new StringBuilder(); string strTableName = GetTableName(); WhereSqlClauseBuilder w = new WhereSqlClauseBuilder(); OrderBySqlClauseBuilder o = new OrderBySqlClauseBuilder(); if (whereSqlClauseBuilder != null) { whereSqlClauseBuilder(w); sb.AppendFormat("select * from {0} where {1}", strTableName, w.ToSqlString()); } else { sb.AppendFormat("select * from {0}", strTableName); } if (orderBySqlClauseBuilder != null) { orderBySqlClauseBuilder(o); sb.Append(" order by " + w.ToSqlString()); } DataTable dt = SQLHelper.GetInstance().ExecuteQuery(sb.ToString(), CommandType.Text); return ORMapping.ToList (dt); } #endregion #region 修改 /// /// 更新 /// /// 更新的对象 /// 条件 /// public static int Update(T obj, Action whereSqlClauseBuilder = null) { StringBuilder sb = new StringBuilder(); string strTableName = GetTableName(); string strFieldValues; GetUpdateFieldAndValue(obj, out strFieldValues); WhereSqlClauseBuilder w = new WhereSqlClauseBuilder(); if (whereSqlClauseBuilder != null) { whereSqlClauseBuilder(w); sb.AppendFormat("update {0} set {1} Where {2}", strTableName, strFieldValues, w.ToSqlString()); } else { sb.AppendFormat("update {0} set {1}", strTableName, strFieldValues); } return SQLHelper.GetInstance().ExecuteNonQuery(sb.ToString(), CommandType.Text); } #endregion #region 内部方法 //获得表名 private static string GetTableName() { T obj = new T(); string strTableName = AttributeManager
.GetTableName(); return strTableName; } //insert所用的字段名和相应值 private static void GetInsertFieldAndValue(T obj, out string strFieldNames, out string strFieldValues) { Dictionary dic = AttributeManager .GetFieldName(obj); strFieldNames = ""; strFieldValues = ""; foreach (var item in dic) { strFieldNames = strFieldNames + "," + item.Key; strFieldValues = strFieldValues + "," + item.Value; } if (strFieldNames.Length > 0) { strFieldNames = strFieldNames.Substring(1); strFieldValues = strFieldValues.Substring(1); } } //insert所用的字段名和相应值 private static void GetUpdateFieldAndValue(T obj, out string strFieldNameAndValue) { Dictionary dic = AttributeManager .GetFieldName(obj); strFieldNameAndValue = ""; foreach (var item in dic) { strFieldNameAndValue = strFieldNameAndValue + item.Key + " = " + item.Value + " ,"; } if (strFieldNameAndValue.Length > 0) { strFieldNameAndValue = strFieldNameAndValue.Substring(0, strFieldNameAndValue.Length-1); } } #endregion }

测试

        static void Main(string[] args)
        {
            //Father father1 = DataManager
   
    .Load().First(); List
    
      father2 = DataManager
     
      .Load(p => { p.Append("Id", "