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;}
        }
  • 相关阅读:
    录制caf 转 mp3
    关于百度地图iOS中 paopaoView 警告的处理方法
    iphone JB开发小记(四)theos、iosOpenDev的调试
    USB 漏洞影响超100万来自不同供应商的路由器
    进程 线程 纤程 中断
    synchronized、ReentrantLock、volatile
    TimeUnit用法
    2021年vivo互联网技术最受欢迎文章TOP25
    前端质量提升利器马可代码覆盖率平台
    zyh@163.net
  • 原文地址:https://www.cnblogs.com/msql/p/3430553.html
Copyright © 2011-2022 走看看