翼度科技»论坛 编程开发 html5 查看内容

C# List<T> 转 DataTable

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
网上有不少List 转 DataTable 的代码 ,但都是要指定类型的,如: ListToDT(List xxxx) 这样的,这样用总觉得有点别扭,想实现如 List item.toDataTable() 这样的转换操作,尝试了下现将主要代码记录如下。
主要转换类 Test.cs:
  1. namespace Test
  2. {
  3.     public static class UnitFunc
  4.     {
  5.        public static DataTable toDataTable(this object obj,string _tName = null)
  6.         {
  7.             Type t = obj.GetType();
  8.             dynamic ts = obj;
  9.             object  tf = ts[0];
  10.             PropertyInfo[] pi = tf.GetType().GetProperties(BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public);
  11.             DataTable DT = new DataTable();
  12.             DT.TableName = _tName == null ? tf.GetType().ToString() : _tName;
  13.             foreach (PropertyInfo p in pi)
  14.             {
  15.                 DT.Columns.Add(p.Name, p.PropertyType);
  16.             }
  17.             DataRow dr = null;
  18.             foreach (var v in ts)
  19.             {
  20.                 dr = DT.NewRow();
  21.                 foreach (PropertyInfo p in pi)
  22.                 {
  23.                     dr[p.Name] = p.GetValue(v, null);
  24.                 }
  25.                 DT.Rows.Add(dr);
  26.             }
  27.             return DT;
  28.         }
  29.     }
  30. }
复制代码
调用:
  1. private static void ReadDataTableFromList()
  2.   {<br>    //以下这段读取数据到List的代码是我自己写的一个小ORM框架,所以看过去可能跟一般的读数据库代码不一样,你们不用管这个,按自己的方法连接和读取数据库到List就行<br>    //VMIS_model是数据表对象
  3.     ConnConfig conn = new ConnConfig(dbtype: DBType.SQLServer, connstring: SQLConnStr);
  4.     DBHelper<VMIS_model> vioDB = new DBHelper<VMIS_model>(conn);
  5.     List<VMIS_vio_model> list = vioDB.Select(whereSQL: "PlateNumber=@PN", sqlParams: new ORMParameter[]
  6.     {
  7.       new ORMParameter("@PN","车牌ABCDE")
  8.     });
  9. <br>    //.toDataTable("xxx"),xxx为自定义表名参数,该参数为空则使用类名作为表名
  10.     DataTable DT = list.toDataTable("VMIS");
  11.     Console.WriteLine("数据加载到DataTable完成,共载入数据:" + DT.Rows.Count.ToString());
  12.     Console.WriteLine(JsonConvert.SerializeObject(DT, Formatting.Indented));
  13.     Console.WriteLine("DataTable表名:" + DT.TableName.ToString());
  14.   }<br>
复制代码
测试截图:

 
 

 

来源:https://www.cnblogs.com/xzg2022/archive/2023/01/02/17019354.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具