前面已经说了List转DataTable,也整理了代码。

现在转回来说说DataTable转List。

先举一个例子

public class Person

{

public int Age{get;set;}

punlic string Name{get;set;}

}

一般我们要实现转换,最好是直接调用,类似

 public void ConvertDataRow(List<Person> lst,DataTable dt)
{
foreach(DataRow row in dt.Rows)
{
Person person = new Person();
if(!row.IsNull("Name"))
{
person.Name = Convert.ToString(row["Name"]);
}
if (!row.IsNull("Age"))
{
person.Age = Convert.ToInt32(row["Age"]);
}
lst.Add(person);
}
}

如果有外面一层方法调用。还可以是类似的代码

 public Person ConvertDataRow(DataRow row)
{ Person person = new Person();
if (!row.IsNull("Name"))
{
person.Name = Convert.ToString(row["Name"]);
}
if (!row.IsNull("Age"))
{
person.Age = Convert.ToInt32(row["Age"]);
}
return person;
}

而我的实现就是输出的后面一种,将DataRow转换成实体。

我就不贴具体的代码了。

与List转DataTable不一样的地方是。一个model类转DataTable一定是固定的方法。就像什么是唯一一个方法。

但是反过来,就不是了。一个DataTable可以转成多个model,同样多个DataTable也可以转成同一个model。

这样就形成了多对多的关系,所以这里在缓存生成的动态方法时,就需要处理唯一标记的问题。我采用了2种方法。

第一种是DataTable名称,同一个名称对应固定的一个动态方法。

第二种是用DataTable的列数,所有列名称构造的一个字符串来标记。

DataReader只有第二种。

05-11 20:47