using System; using System.Text; using Easy4net.DBUtility; using Easy4net.Context; namespace Easy4net.Common { /// /// 数据库条件语句生成器 /// public class DbCondition : Map { private static string WHERE = " WHERE "; private static string EQUAL = " {0} = {1} "; private static string AND_EQ = " AND {0} = {1} "; private static string OR_EQ = " OR {0} = {1} "; private static string GT = " {0} > {1} "; private static string GT_EQ = " {0} >= {1} "; private static string AND_GT = " AND {0} > {1} "; private static string AND_GT_EQ = " AND {0} >= {1} "; private static string OR_GT = " OR {0} > {1} "; private static string OR_GT_EQ = " OR {0} >= {1} "; private static string LT = " {0} < {1} "; private static string LT_EQ = " {0} <= {1} "; private static string AND_LT = " AND {0} < {1} "; private static string AND_LT_EQ = " AND {0} <= {1} "; private static string OR_LT = " OR {0} < {1} "; private static string OR_LT_EQ = " OR {0} <= {1} "; private static string ORDER_BY_ASC = " ORDER BY {0} ASC "; private static string ORDER_BY_DESC = " ORDER BY {0} DESC "; /// /// 参数字符前缀 /// private static string paramChar = string.Empty; /// /// SQL语句创建对象 /// private StringBuilder sbSQL = new StringBuilder(); /// /// 查询SQL语句 /// public string queryString = String.Empty; /// /// 字段信息 /// public ColumnInfo Columns = new ColumnInfo(); /// /// 根据配置文件创建一个默认的条件语句生成器 /// public DbCondition() { DbFactory dbFactory = SessionThreadLocal.Get().DbFactory; paramChar = dbFactory.DbParmChar; } /// /// 根据配置文件创建一个默认的条件语句生成器 /// /// 查询语句 public DbCondition(string query) { DbFactory dbFactory = SessionThreadLocal.Get().DbFactory; paramChar = dbFactory.DbParmChar; this.queryString = query; sbSQL.Append(query); } /// /// 传入查询语句 /// /// 查询语句 /// public DbCondition Query(string query) { this.queryString = query; sbSQL.Append(query); return this; } /// /// 增加Where关键字 /// /// public DbCondition Where() { sbSQL.Append(WHERE); return this; } /// /// 增加Where等于语句 /// /// 字段名 /// 字段值 /// public DbCondition Where(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(WHERE + EQUAL, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加等于语句 /// /// 字段名 /// 字段值 /// public DbCondition Equal(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(EQUAL, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加And等于语句 /// /// 字段名 /// 字段值 /// public DbCondition AndEqual(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(AND_EQ, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加Or等于语句 /// /// 字段名 /// 字段值 /// public DbCondition OrEqual(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(OR_EQ, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加大于语句 /// /// 字段名 /// 字段值 /// public DbCondition GreaterThan(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(GT, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加大于等于语句 /// /// 字段名 /// 字段值 /// public DbCondition GreaterThanEqual(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(GT_EQ, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加And大于语句 /// /// 字段名 /// 字段值 /// public DbCondition AndGreaterThan(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(AND_GT, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加And大于等于语句 /// /// 字段名 /// 字段值 /// public DbCondition AndGreaterThanEqual(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(AND_GT_EQ, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加Or大于语句 /// /// 字段名 /// 字段值 /// public DbCondition OrGreaterThan(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(OR_GT, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加Or大于等于语句 /// /// 字段名 /// 字段值 /// public DbCondition OrGreaterThanEqual(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(OR_GT_EQ, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加小于语句 /// /// 字段名 /// 字段值 /// public DbCondition LessThan(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(LT, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加小于等于语句 /// /// 字段名 /// 字段值 /// public DbCondition LessThanEqual(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(LT_EQ, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加And小于语句 /// /// 字段名 /// 字段值 /// public DbCondition AndLessThan(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(AND_LT, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加And小于等于语句 /// /// 字段名 /// 字段值 /// public DbCondition AndLessThanEqual(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(AND_LT_EQ, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加Or小于语句 /// /// 字段名 /// 字段值 /// public DbCondition OrLessThan(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(OR_LT, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加Or小于等于语句 /// /// 字段名 /// 字段值 /// public DbCondition OrLessThanEqual(string fieldName, object fieldValue) { string formatName = formatKey(fieldName); sbSQL.AppendFormat(OR_LT_EQ, fieldName, paramChar + formatName); Columns[formatName] = fieldValue; return this; } /// /// 增加And等于语句,相当于AndEqual方法 /// /// 字段名 /// 字段值 /// public DbCondition And(string fieldName, object fieldValue) { return this.AndEqual(fieldName, fieldValue); } /// /// 增加Or等于语句,相当于OrEqual方法 /// /// 字段名 /// 字段值 /// public DbCondition Or(string fieldName, object fieldValue) { return this.OrEqual(fieldName, fieldValue); } /// /// 增加Order By Asc递增排序语句 /// /// 排序的字段名 /// public DbCondition OrderByASC(string fieldName) { sbSQL.AppendFormat(ORDER_BY_ASC, fieldName); return this; } /// /// 增加Order By Desc递减排序语句 /// /// 排序的字段名 /// public DbCondition OrderByDESC(string fieldName) { sbSQL.AppendFormat(ORDER_BY_DESC, fieldName); return this; } /// /// 增加Like %XX%语句 /// /// 字段名 /// 字段值 /// public DbCondition Like(string fieldName, object fieldValue) { sbSQL.AppendFormat(" {0} LIKE '%{1}%' ", fieldName, fieldValue); return this; } /// /// 增加And Like %XX%语句 /// /// 字段名 /// 字段值 /// public DbCondition AndLike(string fieldName, object fieldValue) { sbSQL.AppendFormat(" AND {0} LIKE '%{1}%' ", fieldName, fieldValue); return this; } /// /// 增加Or Like %XX%语句 /// /// 字段名 /// 字段值 /// public DbCondition OrLike(string fieldName, object fieldValue) { sbSQL.AppendFormat(" OR {0} LIKE '%{1}%' ", fieldName, fieldValue); return this; } /// /// 增加Like %XX语句 /// /// 字段名 /// 字段值 /// public DbCondition LeftLike(string fieldName, object fieldValue) { sbSQL.AppendFormat(" {0} LIKE '%{1}' ", fieldName, fieldValue); return this; } /// /// 增加And Like %XX语句 /// /// 字段名 /// 字段值 /// public DbCondition AndLeftLike(string fieldName, object fieldValue) { sbSQL.AppendFormat(" AND {0} LIKE '%{1}' ", fieldName, fieldValue); return this; } /// /// 增加Or Like %XX语句 /// /// 字段名 /// 字段值 /// public DbCondition OrLeftLike(string fieldName, object fieldValue) { sbSQL.AppendFormat(" OR {0} LIKE '%{1}' ", fieldName, fieldValue); return this; } /// /// 增加Like XX%语句 /// /// 字段名 /// 字段值 /// public DbCondition RightLike(string fieldName, object fieldValue) { sbSQL.AppendFormat(" {0} LIKE '{1}%' ", fieldName, fieldValue); return this; } /// /// 增加And Like XX%语句 /// /// 字段名 /// 字段值 /// public DbCondition AndRightLike(string fieldName, object fieldValue) { sbSQL.AppendFormat(" AND {0} LIKE '{1}%' ", fieldName, fieldValue); return this; } /// /// 增加Or Like XX%语句 /// /// 字段名 /// 字段值 /// public DbCondition OrRightLike(string fieldName, object fieldValue) { sbSQL.AppendFormat(" OR {0} LIKE '{1}%' ", fieldName, fieldValue); return this; } /// /// 输出本条件对象的字符串描述 /// /// public override string ToString() { return sbSQL.ToString(); } /// /// 对关键字进行格式化输出 /// /// 要格式化的关键字 /// private string formatKey(string key) { int index = key.IndexOf('.'); if (index >= 0) { key = key.Substring(index + 1, key.Length-(index+1)); } return key; } } }