using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Text; namespace iMES.Bi.API { public static class MyExtensions { public static int[] SplitTOInt(this string strs, char ch) { string[] arrstr = strs.Split(ch); int[] arrint = new int[arrstr.Length]; for (int i = 0; i < arrstr.Length; i++) { arrint[i] = int.Parse(arrstr[i].ToString()); } return arrint; } public static List SplitTOList(this string strs, char ch) { List Lstr = new List(); string[] arrstr = strs.Split(ch); int[] arrint = new int[arrstr.Length]; for (int i = 0; i < arrstr.Length; i++) { Lstr.Add(arrstr[i].ToString()); } return Lstr; } public static Dictionary SplitTODictionary(this string strs, char ch, string strKey) { Dictionary Lstr = new Dictionary(); string[] arrstr = strs.Split(ch); int[] arrint = new int[arrstr.Length]; for (int i = 0; i < arrstr.Length; i++) { Lstr.Add(arrstr[i].ToString(), strKey); } return Lstr; } /// /// 将List转化为String /// /// /// /// public static string ListTOString(this List Lists, char ch) { string strReturn = ""; foreach (var item in Lists) { strReturn = strReturn + item.ToString() + ch; } return strReturn.TrimEnd(ch); } /// /// 将List(int)转化为String /// /// /// /// public static string ListTOString(this List Lists, char ch) { string strReturn = ""; foreach (var item in Lists) { strReturn = strReturn + item.ToString() + ch; } return strReturn.TrimEnd(ch); } /// /// 获取需要IN的格式 /// /// /// public static string ToFormatLike(this string strKys) { StringBuilder sbKeys = new StringBuilder(); foreach (var item in strKys.Split(',')) { sbKeys.AppendFormat("'" + item.ToString() + "',"); } return sbKeys.Length > 0 ? sbKeys.ToString().TrimEnd(',').Trim('\'') : ""; } /// /// 获取需要IN的格式 /// /// /// public static string ToFormatLike(this string strKys, char ch) { StringBuilder sbKeys = new StringBuilder(); foreach (var item in strKys.Split(ch)) { sbKeys.AppendFormat("'" + item.ToString() + "',"); } return sbKeys.Length > 0 ? sbKeys.ToString().TrimEnd(',').Trim('\'') : ""; } /// /// 取前N个字符,后面的用省略号代替 /// /// /// public static string ToMangneStr(this string strKys, int intLenght) { return strKys.Length > intLenght ? strKys.Substring(0, intLenght) + "…………" : strKys; } public static DataTable ToDataTable(this IEnumerable varlist) { DataTable dtReturn = new DataTable(); // column names PropertyInfo[] oProps = null; if (varlist == null) return dtReturn; foreach (T rec in varlist) { if (oProps == null) { oProps = ((Type)rec.GetType()).GetProperties(); foreach (PropertyInfo pi in oProps) { Type colType = pi.PropertyType; if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>))) { colType = colType.GetGenericArguments()[0]; } dtReturn.Columns.Add(new DataColumn(pi.Name, colType)); } } DataRow dr = dtReturn.NewRow(); foreach (PropertyInfo pi in oProps) { dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue (rec, null); } dtReturn.Rows.Add(dr); } return dtReturn; } public static DataTable OrderBy(this DataTable dt, string orderBy) { dt.DefaultView.Sort = orderBy; return dt.DefaultView.ToTable(); } public static DataTable Where(this DataTable dt, string where) { DataTable resultDt = dt.Clone(); DataRow[] resultRows = dt.Select(where); foreach (DataRow dr in resultRows) resultDt.Rows.Add(dr.ItemArray); return resultDt; } /// /// Datatable转换为Json /// /// Datatable对象 /// Json字符串 public static string ToJson(this DataTable dt) { StringBuilder jsonString = new StringBuilder(); jsonString.Append("["); DataRowCollection drc = dt.Rows; for (int i = 0; i < drc.Count; i++) { jsonString.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { string strKey = dt.Columns[j].ColumnName; string strValue = drc[i][j].ToString(); Type type = dt.Columns[j].DataType; jsonString.Append("\"" + strKey + "\":"); strValue = StringFormat(strValue, type); if (j < dt.Columns.Count - 1) { jsonString.Append(strValue + ","); } else { jsonString.Append(strValue); } } jsonString.Append("},"); } jsonString.Remove(jsonString.Length - 1, 1); if (jsonString.Length != 0) { jsonString.Append("]"); } return jsonString.ToString(); } public static int ToInt32(this Object obj) { return Convert.ToInt32(obj); } public static DateTime ToDateTime(this Object obj) { return Convert.ToDateTime(obj); } public static T GetProperty(this object obj, string propertyName) { var property = obj.GetType().GetProperty(propertyName); if (property != null) { return (T)property.GetValue(obj, null); } throw new ArgumentNullException(propertyName); } /// /// DataTable转成Json /// /// /// /// public static string ToJson(this DataTable dt, string jsonName) { StringBuilder Json = new StringBuilder(); if (string.IsNullOrEmpty(jsonName)) jsonName = dt.TableName; Json.Append("{\"" + jsonName + "\":["); if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { Json.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { Type type = dt.Rows[i][j].GetType(); Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j].ToString(), type)); if (j < dt.Columns.Count - 1) { Json.Append(","); } } Json.Append("}"); if (i < dt.Rows.Count - 1) { Json.Append(","); } } } Json.Append("]}"); return Json.ToString(); } /// /// 过滤特殊字符 /// /// /// public static string String2Json(String s) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.Length; i++) { char c = s.ToCharArray()[i]; switch (c) { case '\"': sb.Append("\\\""); break; case '\\': sb.Append("\\\\"); break; case '/': sb.Append("\\/"); break; case '\b': sb.Append("\\b"); break; case '\f': sb.Append("\\f"); break; case '\n': sb.Append("\\n"); break; case '\r': sb.Append("\\r"); break; case '\t': sb.Append("\\t"); break; default: sb.Append(c); break; } } return sb.ToString(); } /// /// 格式化字符型、日期型、布尔型 /// /// /// /// public static string StringFormat(string str, Type type) { if (type == typeof(string)) { str = String2Json(str); str = "\"" + str + "\""; } else if (type == typeof(DateTime)) { str = "\"" + str + "\""; } else if (type == typeof(Int32)) { if (str.Trim() == "") { str = "\"" + str + "\""; } } else if (type == typeof(bool)) { str = str.ToLower(); } return str; } /// /// 过滤特殊字符 /// 如果字符串为空,直接返回。 /// /// 需要过滤的字符串 /// 过滤好的字符串 public static string FilterSpecial(this string str) { if (str == "") { return str; } else { str = str.Replace("'", ""); str = str.Replace("<", ""); str = str.Replace(">", ""); str = str.Replace("%", ""); str = str.ToLower().Replace("'delete", ""); str = str.ToLower().Replace("'truncate", ""); str = str.Replace("''", ""); str = str.Replace("\"\"", ""); str = str.Replace(",", ""); str = str.Replace(".", ""); str = str.Replace(">=", ""); str = str.Replace("=<", ""); str = str.Replace(";", ""); str = str.Replace("||", ""); str = str.Replace("[", ""); str = str.Replace("]", ""); str = str.Replace("&", ""); str = str.Replace("#", ""); str = str.Replace("/", ""); str = str.Replace("|", ""); str = str.Replace("?", ""); str = str.Replace(">?", ""); str = str.Replace("?<", ""); return str; } } /// /// 删除列 /// /// /// 保存的列,其他删除 /// public static DataTable DelTableCol(this DataTable dt, string sCol) { if (sCol == "") return dt; string[] sp = sCol.Split(','); string sqldd = ""; for (int n = 0; n < sp.Length; n++) { sqldd += sp[n].Split('|')[0] + ','; } for (int i = 0; i < dt.Columns.Count; i++) { if (!sqldd.Split(',').Contains(dt.Columns[i].ColumnName)) { dt.Columns.RemoveAt(i); i = i - 1; } else { for (int j = 0; j < sp.Length; j++) { string[] sg = sp[j].Split('|'); if (sg.Length > 1 && sg[0] == dt.Columns[i].ColumnName) { dt.Columns[i].ColumnName = sg[1]; } } } } return dt; } /// /// 根据条件过滤表 /// /// 未过滤之前的表 /// 过滤条件 /// 返回过滤后的表 public static DataTable FilterTable(this DataTable dt, string filter, string isSJ = "N") { DataTable newTable = dt.Clone(); DataRow[] drs = dt.Select(filter); foreach (DataRow dr in drs) { newTable.Rows.Add(dr.ItemArray); } return newTable; } /// /// 随机排序 /// /// /// public static DataTable SJTable(this DataTable newTable) { Random ran = new Random(); newTable.Columns.Add("sort", typeof(int)); for (int i = 0; i < newTable.Rows.Count; i++) { newTable.Rows[i]["sort"] = ran.Next(0, 100); } DataView dv = newTable.DefaultView; dv.Sort = "sort asc"; newTable = dv.ToTable(); return newTable; } /// /// 处理生成的DataTable /// /// /// 添加的列 /// 需要合并的列 /// public static DataTable AddColum(this DataTable DTTable,string addclName, char strChar,params string[] clNames) { DTTable.Columns.Add(addclName); for (int i = 0; i < DTTable.Rows.Count; i++) { string strTemp = ""; for (int m = 0; m < clNames.Length; m++) { strTemp = strTemp + DTTable.Rows[i][clNames[m]].ToString() + strChar; } DTTable.Rows[i][addclName] = strTemp.TrimEnd(strChar); } return DTTable; } /// /// dataTable分页 /// /// /// /// /// public static DataTable SplitDataTable(this DataTable dt, int PageIndex, int PageSize) { if (PageIndex == 0) return dt; DataTable newdt = dt.Clone(); //newdt.Clear(); int rowbegin = (PageIndex - 1) * PageSize; int rowend = PageIndex * PageSize; if (rowbegin >= dt.Rows.Count) return newdt; if (rowend > dt.Rows.Count) rowend = dt.Rows.Count; for (int i = rowbegin; i <= rowend - 1; i++) { DataRow newdr = newdt.NewRow(); DataRow dr = dt.Rows[i]; foreach (DataColumn column in dt.Columns) { newdr[column.ColumnName] = dr[column.ColumnName]; } newdt.Rows.Add(newdr); } return newdt; } } }