C# DataTable转换成实体列表 与 实体列表转换成DataTable
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# DataTable转换成实体列表 与 实体列表转换成DataTable相关的知识,希望对你有一定的参考价值。
/// <summary> /// DataTable转换成实体列表 /// </summary> /// <typeparam name="T">实体 T </typeparam> /// <param name="table">datatable</param> /// <returns></returns> public static IList<T> DataTableToList<T>(DataTable table) where T : class { if (!IsHaveRows(table)) return new List<T>(); IList<T> list = new List<T>(); T model = default(T); foreach (DataRow dr in table.Rows) { model = Activator.CreateInstance<T>(); foreach (DataColumn dc in dr.Table.Columns) { object drValue = dr[dc.ColumnName]; PropertyInfo pi = model.GetType().GetProperty(dc.ColumnName); if (pi != null && pi.CanWrite && (drValue != null && !Convert.IsDBNull(drValue))) { pi.SetValue(model, drValue, null); } } list.Add(model); } return list; } /// <summary> /// 实体列表转换成DataTable /// </summary> /// <typeparam name="T">实体</typeparam> /// <param name="list"> 实体列表</param> /// <returns></returns> public static DataTable ListToDataTable<T>(IList<T> list) where T : class { if (list == null || list.Count <= 0) { return null; } DataTable dt = new DataTable(typeof(T).Name); DataColumn column; DataRow row; PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); int length = myPropertyInfo.Length; bool createColumn = true; foreach (T t in list) { if (t == null) { continue; } row = dt.NewRow(); for (int i = 0; i < length; i++) { PropertyInfo pi = myPropertyInfo[i]; string name = pi.Name; if (createColumn) { column = new DataColumn(name, pi.PropertyType); dt.Columns.Add(column); } row[name] = pi.GetValue(t, null); } if (createColumn) { createColumn = false; } dt.Rows.Add(row); } return dt; }
以上是关于C# DataTable转换成实体列表 与 实体列表转换成DataTable的主要内容,如果未能解决你的问题,请参考以下文章