博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将List<T>转化成 DataTable--调整可空类型的转化错误
阅读量:6820 次
发布时间:2019-06-26

本文共 2565 字,大约阅读时间需要 8 分钟。

加载表结构并保持成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    {        ///          /// 转化一个DataTable         ///          /// 
/// ///
public static DataTable ToDataTable
(this IEnumerable
list,params string[] tableName) { //创建属性的集合 List
pList = new List
(); //获得反射的入口 Type type = typeof(T); string tname = "Table1"; if (tableName.Length >= 1) { tname = tableName[0]; } DataTable dt = new DataTable(tname); //把所有的public属性加入到集合 并添加DataTable的列 Array.ForEach
(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; }}}

 

转载于:https://www.cnblogs.com/zxbzl/p/4617783.html

你可能感兴趣的文章