zoukankan      html  css  js  c++  java
  • 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;}
        }
  • 相关阅读:
    [总结] 二维ST表及其优化
    [51Nod 1515] 明辨是非
    [总结] fhq_Treap 学习笔记
    [ZJOI2008] 骑士
    [SDOI2010] 古代猪文
    [POJ 1006] 生理周期
    [POJ 2891] Strange Way to Express Integers
    [Luogu 1516] 青蛙的约会
    python第十三天
    python第十二天-----RabbitMQ
  • 原文地址:https://www.cnblogs.com/msql/p/3430553.html
Copyright © 2011-2022 走看看