zoukankan      html  css  js  c++  java
  • IList转化为DataSet,解决了System.nullable()的问题

    在做毕业设计时,需要用到这项功能,于是在网上搜索了一段代码,但是后来发现,在处理int类型时,会发生System.nullable的错误,于是自己查阅资料,进行了小小的改动,终于成功。。详细见一下方法。

      public static DataSet ConvertToDataSet<T>(IList<T> list)
            {
                if (list == null || list.Count <= 0)
                {
                    return null;
                }
    
                DataSet ds = new DataSet();
                DataTable dt = new DataTable(typeof(T).Name);
                DataColumn column;
                DataRow row;
    
                System.Reflection.PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
    
                foreach (T t in list)
                {
                    if (t == null)
                    {
                        continue;
                    }
    
                    row = dt.NewRow();
    
                    for (int i = 0, j = myPropertyInfo.Length; i < j; i++)
                    {
                        System.Reflection.PropertyInfo pi = myPropertyInfo[i];
    
                        string name = pi.Name;
                       // if (pi.PropertyType == System.Nullable<>)
                       // {
                          //  pi.PropertyType = System.Int32;
                       // }
                        if (dt.Columns[name] == null)
                        {
                            if (pi.PropertyType.IsGenericType && pi.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))//这段是我进行修改和判断的地方
                            {
                                Type[] typeArray = pi.PropertyType.GetGenericArguments();
                                Type baseType = typeArray[0];
                                column = new DataColumn(name, baseType);
                            }
                            else
                            {
                                column = new DataColumn(name, pi.PropertyType);
                            }
                            dt.Columns.Add(column);
                        }
    
                        row[name] = pi.GetValue(t, null);
                    }
    
                    dt.Rows.Add(row);
                }
    
                ds.Tables.Add(dt);
    
                return ds;
            }
  • 相关阅读:
    增加一个基类没有的方法
    修改或加强基类的属性
    linux rm命令详解
    Apache的配置httpd.conf杂谈
    解决 You don't have permission to access / on this server. 错误的另一方法
    ubuntu下成功配置LAMP 并安装PHPMyadmin
    C#连接SQLite的方法
    内存使用大比拼 之 String – StringBuffer
    非常喜欢Gedit,绝不逊色EditPlus!
    关于内存
  • 原文地址:https://www.cnblogs.com/chenyready/p/3044890.html
Copyright © 2011-2022 走看看