将List<T>转化成 DataTable--调整可空类型的转化错误
加载表结构并保持成XML

string cmdText = @"select * from kb_lable_temp where 1=2"; using (SqlConnection conn = new SqlConnection(DBCtx.ConnStr)) { DataTable dt = new DataTable(); SqlCommand cmd = new SqlCommand(cmdText,conn); conn.Open(); using (var dr = cmd.ExecuteReader(CommandBehavior.SchemaOnly)) { dt.Load(dr); dt.WriteXmlSchema("C:\\xxx.xml"); } } DataTable dt3 = new DataTable(); dt3.ReadXmlSchema("C:\\xxx.xml");
List<T>到DataTable

using System.Data; using System.Collections.Generic; using System.Reflection; using System; using System.Collections; namespace F.Studio.Util { public static class DataTableExtensions { /// <summary> /// 转化一个DataTable /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> /// <returns></returns> public static DataTable ToDataTable<T>(this IEnumerable<T> list,params string[] tableName) { //创建属性的集合 List<PropertyInfo> pList = new List<PropertyInfo>(); //获得反射的入口 Type type = typeof(T); string tname = "Table1"; if (tableName.Length >= 1) { tname = tableName[0]; } DataTable dt = new DataTable(tname); //把所有的public属性加入到集合 并添加DataTable的列 Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); var theType=p.PropertyType; //处理可空类型 if (theType.IsGenericType && theType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) { dt.Columns.Add(p.Name,Nullable.GetUnderlyingType(theType)); } else { dt.Columns.Add(p.Name, theType); } }); foreach (var item in list) { //创建一个DataRow实例 DataRow row = dt.NewRow(); //给row 赋值 pList.ForEach(p => { var v=p.GetValue(item, null); row[p.Name] = v==null ? DBNull.Value : v; }); //加入到DataTable dt.Rows.Add(row); } return dt; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述