DataTable 转 List<T>

最近在做一个项目,表的数据巨多,而且表的字段一般都在30个以上。公司规定不能用Nhibernate以及ef等ORM框架。

所以查询绑定时的工作量极为痛苦。没有办法,自己写了个DataTableToList方法来简化一下,希望对大家有所帮助。

其实这个方法主要是用泛型方法来实现的,代码如下,仅供参考如有不妥,欢迎拍砖!

 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack) {
                GridView1.DataSource =result();
                GridView1.DataBind();
            }
        }
        private List<Student> result() {
            DataTable dt = new DataTable();
            DataColumn[] cols = new DataColumn[] { 
                 new DataColumn(){ ColumnName="name"},
                 new DataColumn(){ ColumnName="sex"},
                 new DataColumn(){ ColumnName="age"}
            };
            dt.Columns.AddRange(cols);
            List<object[]> rows = new List<object[]>  { 
               new object[] { "xiaochun","man","22"},
               new object[] { "xiaochun1", "man", "22" },
               new object[] { "xiaochun2", "man", "22" }
            };
            Array.ForEach(rows.ToArray(),row=>dt.Rows.Add(row));
            List<Student> stuList = new List<Student>();
            stuList = DataTableToList(new Student(),dt);
            return stuList;
        }

        private List<T> DataTableToList<T>(T obj,DataTable dt) {
            List<T> list = new List<T>();
            foreach (DataRow row in dt.Rows) { 
                  Type t=typeof(T);
                  PropertyInfo[] info = t.GetProperties();
                  foreach (DataColumn col in dt.Columns) {
                      info.Where(s => s.Name.ToLower() == col.ColumnName.ToLower())
                            .Select(s => s).First().SetValue(obj,row[col.ColumnName].ToString(),null);                  }
                  list.Add(obj);
            }
            return list;
        }
    }

    public class Student{
        public string name{get;set;}
        public string sex{get;set;}
        public string age{get;set;}
    }

 

转载于:https://www.cnblogs.com/msql/p/3430553.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值