zoukankan      html  css  js  c++  java
  • 将List<T>转化成 DataTable调整可空类型的转化错误

    加载表结构并保持成XML

    View Code
                    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

    View Code
    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;
            }
    }
    }
  • 相关阅读:
    iOS中的UISearchBar
    iOS中的UIDatePicker 日期选择器
    iOS中的 深拷贝和浅拷贝
    iOS中的定时器实现图片的轮播
    iOS Crash文件的解析(一)
    iOS中的UIToolBar
    iOS中的瀑布流(RootCollectionViewControlle)
    iOS中NSThread(主线程,子线程)
    iOS中的串行,并行,分组,一次,障碍,延迟,反复执行(GCD)
    iOS中的动画
  • 原文地址:https://www.cnblogs.com/wdfrog/p/3071487.html
Copyright © 2011-2022 走看看