using System; using System.Collections.Generic; using System.Data; using System.Reflection; using System.Text; namespace ConsoleApplication1 { static class ConvertDatatable { /// <summary> /// 扩展方法:将List<T>转化为DataTable /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> /// <returns></returns> public static DataTable ToDataTable<T>(this List<T> list) { DataTable datatable = new DataTable(); PropertyInfo[] propInfo = typeof(T).GetProperties(BindingFlags.Public|BindingFlags.Instance); foreach (var item in propInfo) { datatable.Columns.Add(item.Name); } foreach (T item in list) { var values=new object[propInfo.Length]; for (int i = 0; i < propInfo.Length; i++) { values[i] = propInfo[i].GetValue(item, null); } datatable.Rows.Add(values); } return datatable; } } class Student { public int? id { get; set; } public string name { get; set; } public int? age { get; set; } public string address { get; set; } } }
调用:
class Program { static void Main(string[] args) { List<Student> listStu = new List<Student>() { new Student(){id=1,name="张三",age=2,address="东十路1号"}, new Student(){id=2,name="李四",age=8} }; DataTable dt = listStu.ToDataTable<Student>(); foreach (DataRow item in dt.Rows) { Console.Write(item["id"].ToString()); Console.Write(item["name"].ToString()); Console.Write(item["age"].ToString()); Console.Write(item["address"].ToString()); Console.WriteLine("\r\n"); } Console.Read(); } }