工作中看到一段需要动态转换模型的代码,当数据比较多的时候,效率会慢,经过试验C# 虽然区分大小写,但在Datarow中是模糊了的,遂意为C#还是很好用的。示例Demo如下,推荐第二种写法。
推荐写法:
public static List<T> DataTableToList2<T>(DataTable dt)
{
List<T> lists = new List<T>();
for (int i = 0; i < dt.Rows.Count; i++)
{
T t = Activator.CreateInstance<T>();
//获取当前T对象的所有属性
PropertyInfo[] propertys = t.GetType().GetProperties();
//通过属性集合迭代出每一个属性对象
foreach (PropertyInfo item in propertys)
{
int index = dt.Columns.IndexOf(item.Name);// datatable 中列名不区分大小写,
if (index>=0)//dt.Columns.Contains(item.Name),用index读取值速度要更好一些
{
//判断当前DataTable的单列值是否为null
if (dt.Rows[i][index] != DBNull.Value)
//将当前DataTable的单列值赋予相匹配的属性,否则赋予一个null值.
item.SetValue(t, (dt.Rows[i][index]), null);
else
item.SetValue(t, null, null);
}
}
lists.Add(t);
}
return lists;
}
懒得分开写,直接写代码吧:
public class TmpMode
{
public string AAA { get; set; }
public string BBB { get; set; }
public string c { get; set; }
public string AAA1 { get; set; }
public string BBB2 { get; set; }
public string AAA3 { get; set; }
public s