using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Linq; using System.Reflection; using System.Text; using System.Collections; using System.IO; using System.Xml.Serialization; namespace HuaTong.General.Utility { /// <summary> /// 数据集处理 /// </summary> public static class DataTableHandler { /// <summary> /// 检查DataSet是否可用 /// </summary> public static bool CheckData(this DataSet ds, int valNum) { var flag = ds != null && ds.Tables.Count > 0; if (flag) { int count = 0; for (var i = 0; i < valNum; i++) { var dtflag = ds.Tables[i].CheckData(); if (dtflag) count++; } return count == valNum; } return flag; } /// <summary> /// 检查DataTable是否可用 /// </summary> public static bool CheckData(this DataTable dt) { return dt != null && dt.Rows.Count > 0; } /// <summary> /// 检查DataSet是否可用 /// </summary> public static DataRow FirstRow(this DataSet ds) { return ds.Tables[0].FirstRow(); } /// <summary> /// 检查DataTable是否可用 /// </summary> public static DataRow FirstRow(this DataTable dt) { return dt.Rows[0]; } /// <summary> /// DataTable转换为List /// </summary> public static List<T> ToList<T>(this DataTable dt) where T : new() { List<T> list = new List<T>(); foreach (DataRow dr in dt.Rows) { T t = dr.ToEntity<T>(); //对象添加到泛型集合中 list.Add(t); } return list; } /// <summary> /// DataRow转换为实体 /// </summary> public static T ToEntity<T>(this DataRow dr) where T : new() { if (dr == null) { return default(T); } T model = new T(); var props = ModelHandler.PropCache(model); for (int i = 0; i < dr.Table.Columns.Count; i++) { if (props.Any(m => StringHelper.IsEqualString(m.Name, dr.Table.Columns[i].ColumnName))) { var prop = props.Single(m => StringHelper.IsEqualString(m.Name, dr.Table.Columns[i].ColumnName)); if (dr[i] != null && dr[i] != DBNull.Value) { prop.SetValue(model, Convert.ChangeType(dr[i], prop.PropertyType), null); } } } return model; } /// <summary> /// List转换为DataTable /// </summary> public static DataTable ToDataTable<T>(this List<T> items) { var tb = new DataTable(typeof(T).Name); PropertyInfo[] props = ModelHandler.PropCache<T>(); foreach (PropertyInfo prop in props) { Type t = ModelHandler.GetCoreType(prop.PropertyType); tb.Columns.Add(prop.Name, t); } foreach (T item in items) { var values = new object[props.Length]; for (int i = 0; i < props.Length; i++) { values[i] = props[i].GetValue(item, null); } tb.Rows.Add(values); } return tb; } /// <summary> /// DataTable转换为XML /// </summary> public static string ToXML(this DataTable dt) { if (!string.IsNullOrEmpty(dt.TableName)) { dt.TableName = "datatable_1"; } //xml序列化对象 XmlSerializer xmlSerial = new XmlSerializer(typeof(DataTable)); StringWriter sw = new StringWriter(); xmlSerial.Serialize(sw, dt); // 序列化table StringReader sr = new StringReader(sw.ToString()); return sr.ReadToEnd(); } } }