• 将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;
            }
    }
    }
  • 相关阅读:
    re模块
    collections模块
    hashlib模块
    序列号模块
    random模块
    sys模块
    OS模块
    工厂模式
    Go语言之直接选择排序
    Go语言之直接插入排序
  • 原文地址:https://www.cnblogs.com/zxbzl/p/4617783.html
Copyright © 2020-2023  润新知