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;}
        }
  • 相关阅读:
    Redis3.2集群部署安装
    熟悉SQL Server 数据类型
    泛型的参数简介和参数约束
    流(Stream)与文件流(FileStream)
    C#提取双引号中的字符串
    数组,一维数组,二维数组,交错数组
    结构,枚举
    C#中唯一的三元运算符
    位运算
    异常处理语句
  • 原文地址:https://www.cnblogs.com/msql/p/3430553.html
Copyright © 2011-2022 走看看