C# 实现List和DataTable互转

1.DataTable转List
// 实体转换辅助类 datatable to list
public class ModelConvertHelper where T : new()
{
public static List ConvertToModel(DataTable dt)
{
// 定义集合
List ts = new List();
// 获得此模型的类型
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; // 检查DataTable是否包含此列
if (dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter
if (!pi.CanWrite) continue;
object value = dr[tempName];
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
ts.Add(t);
}
return ts;
}
}

调用示例:
List Userlist = ModelConvertHelper.ConvertToModel(DataTable对象);

2.List转DataTable
// list to datatable
public static DataTable ListToDatatable(IEnumerable collection)
{
var props = typeof(T).GetProperties();
var dt = new DataTable();
dt.Columns.AddRange(props.Select(p => new
DataColumn(p.Name, p.PropertyType)).ToArray());
if (collection.Count() > 0)
{
for (int i = 0; i < collection.Count(); i++)
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in props)
{
object obj = pi.GetValue(collection.ElementAt(i), null);
tempList.Add(obj);
}
object[] array = tempList.ToArray();
dt.LoadDataRow(array, true);
}
}
return dt;
}
调用示例:
DataTable dtUser = ListToDatatable(List对象);

posted @ 2020-07-20 21:04  SelenaZhou  阅读(584)  评论(0编辑  收藏  举报