自定义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", "