|
网上有不少List 转 DataTable 的代码 ,但都是要指定类型的,如: ListToDT(List xxxx) 这样的,这样用总觉得有点别扭,想实现如 List 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()
- {<br> //以下这段读取数据到List的代码是我自己写的一个小ORM框架,所以看过去可能跟一般的读数据库代码不一样,你们不用管这个,按自己的方法连接和读取数据库到List就行<br> //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")
- });
- <br> //.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());
- }<br>
复制代码 测试截图:
来源:https://www.cnblogs.com/xzg2022/archive/2023/01/02/17019354.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|