C# List<T> 转 DataTable

  • C# List<T> 转 DataTable已关闭评论
  • 142 次浏览
  • A+
所属分类:.NET技术
摘要

网上有不少List<T> 转 DataTable 的代码 ,但都是要指定类型的,如: ListToDT<T>(List<T> xxxx) 这样的,这样用总觉得有点别扭,想实现如 List<T> item.toDataTable() 这样的转换操作,尝试了下现将主要代码记录如下。

网上有不少List<T> 转 DataTable 的代码 ,但都是要指定类型的,如: ListToDT<T>(List<T> xxxx) 这样的,这样用总觉得有点别扭,想实现如 List<T> item.toDataTable() 这样的转换操作,尝试了下现将主要代码记录如下。

主要转换类 Test.cs:

namespace Test {     public static class UnitFunc     {        public static DataTable toDataTable(this object obj,string _tName = null)         {             Type t = obj.GetType();             dynamic ts = obj;             object  tf = ts[0];              PropertyInfo[] pi = tf.GetType().GetProperties(BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public);             DataTable DT = new DataTable();             DT.TableName = _tName == null ? tf.GetType().ToString() : _tName;             foreach (PropertyInfo p in pi)             {                 DT.Columns.Add(p.Name, p.PropertyType);             }              DataRow dr = null;             foreach (var v in ts)             {                 dr = DT.NewRow();                 foreach (PropertyInfo p in pi)                 {                     dr[p.Name] = p.GetValue(v, null);                 }                 DT.Rows.Add(dr);             }             return DT;         }      } }

调用:

private static void ReadDataTableFromList()   {
    //以下这段读取数据到List的代码是我自己写的一个小ORM框架,所以看过去可能跟一般的读数据库代码不一样,你们不用管这个,按自己的方法连接和读取数据库到List就行
    //VMIS_model是数据表对象     ConnConfig conn = new ConnConfig(dbtype: DBType.SQLServer, connstring: SQLConnStr);     DBHelper<VMIS_model> vioDB = new DBHelper<VMIS_model>(conn);     List<VMIS_vio_model> list = vioDB.Select(whereSQL: "PlateNumber=@PN", sqlParams: new ORMParameter[]     {       new ORMParameter("@PN","车牌ABCDE")     });
    //.toDataTable("xxx"),xxx为自定义表名参数,该参数为空则使用类名作为表名     DataTable DT = list.toDataTable("VMIS");     Console.WriteLine("数据加载到DataTable完成,共载入数据:" + DT.Rows.Count.ToString());     Console.WriteLine(JsonConvert.SerializeObject(DT, Formatting.Indented));     Console.WriteLine("DataTable表名:" + DT.TableName.ToString());   }

测试截图:

C# List<T> 转 DataTable

 

 C# List<T> 转 DataTable