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对象);

相关文章