DataTable 转 List<T>
2013-11-19 00:10 sql_manage 阅读(416) 评论(0) 编辑 收藏 举报最近在做一个项目,表的数据巨多,而且表的字段一般都在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;} }