C#(99):泛型举例:List<T>与DateTable相互转换
一、 DataTable转换到List<T>
/// <summary> /// TableToList /// </summary> public class TableListConverter<T> where T : class, new() { public static IList<T> TableToList(DataTable dt) { IList<T> ts = new List<T>();// 定义集合 Type type = typeof(T);// 获得此模型的类型 string tempName = ""; foreach (DataRow dr in dt.Rows) { T t = new T(); // 获得此模型的公共属性 PropertyInfo[] propertys = t.GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { tempName = pi.Name; if (dt.Columns.Contains(tempName))// 检查DataTable是否包含此列 { if (!pi.CanWrite) continue;// 判断此属性是否有Setter object value = dr[tempName]; if (value != DBNull.Value) pi.SetValue(t, value, null); } } ts.Add(t); } return ts; } }
应用:
// 获得查询结果 DataTable dt = DbHelper.ExecuteDataTable("..."); // 把DataTable转换为IList<UserInfo> IList<UserInfo> users = TableListConverter<UserInfo>.TableToList(dt);
二、 List<T>转换到DataTable
/// <summary> /// ListToTable /// </summary> public class TableListConverter { public static DataTable ListToTable<T>(IList<T> list) where T : class, new() { if (list == null) return null; Type type = typeof(T); DataTable dt = new DataTable(); PropertyInfo[] properties = Array.FindAll(type.GetProperties(), p => p.CanRead);//判断此属性是否有Getter Array.ForEach(properties, prop => { dt.Columns.Add(prop.Name, prop.PropertyType); });//添加到列 foreach (T t in list) { DataRow row = dt.NewRow(); Array.ForEach(properties, prop => { row[prop.Name] = prop.GetValue(t, null); });//添加到行 dt.Rows.Add(row); } return dt; } }
应用:
//IList<UserInfo> users DataTable dt =TableListConverter.ListToTable(users)
posted on 2018-08-06 09:58 springsnow 阅读(497) 评论(0) 编辑 收藏 举报