通常在开发中处理DataTable往往会比较繁琐,但是如果是实体类List会相对简单得多。下面是C#中DataTable转List的一种方法:
1、实体转换辅助类
/// <summary>
/// 实体转换辅助类
/// </summary>
public class ModelConvertHelper<T> where T : new() {
public static IList<T> ConvertToModel(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; // 检查DataTable是否包含此列
if (dt.Columns.Contains(tempName)) {
// 判断此属性是否有Setter
if (!pi.CanWrite)
continue;
Type piType = pi.PropertyType;
object value = dr[tempName];
if (value != DBNull.Value)
if (value.GetType() == piType) {
pi.SetValue(t , value , null);
}
else if (piType == typeof(DateTime?)) {
pi.SetValue(t , value , null);
}
else if (piType == typeof(int?)) {
pi.SetValue(t , value , null);
}
else if (piType == typeof(decimal?)) {
pi.SetValue(t , value , null);
}
else if (piType == typeof(decimal))
{
pi.SetValue(t, value.ToDecimal(), null);
}
}
}
ts.Add(t);
}
return ts;
}
}
2、使用方法
public class student
{
/// <summary>
/// id
/// </summary>
public int id { get; set; }
/// <summary>
/// 名称
/// </summary>
public string name { get; set; }
}
//这里对DataTable初始化
DataTable dt = new DataTable();
if (dt != null && dt.Rows.Count > 0)
{
return ModelConvertHelper<student>.ConvertToModel(dt).ToList();
}