c#采用emit将DataTable转List

前面已经说了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只有第二种。

 

 

posted @ 2019-03-01 20:46  IT苦行僧  阅读(468)  评论(0编辑  收藏  举报