• list互转datatable 支持Nullable转换


            /// <summary>
            /// list转datatable
            /// </summary>
            /// <param name="list"></param>
            /// <returns></returns>
            public static DataTable ListToTable(IList list)
            {
                DataTable dt = new DataTable();
                if (list != null)
                {
                    //通过反射获取list中的字段 
                    System.Reflection.PropertyInfo[] p = list[0].GetType().GetProperties();
                    foreach (System.Reflection.PropertyInfo pi in p)
                    {
                        var colType = pi.PropertyType;
                        if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                        {
                            colType = colType.GetGenericArguments()[0];
                        }
    
                        dt.Columns.Add(pi.Name, colType);
                    }
                    for (int i = 0; i < list.Count; i++)
                    {
                        IList TempList = new ArrayList();
                        //将IList中的一条记录写入ArrayList
                        foreach (System.Reflection.PropertyInfo pi in p)
                        {
                            object oo = pi.GetValue(list[i], null);
                            TempList.Add(oo);
                        }
                        object[] itm = new object[p.Length];
                        for (int j = 0; j < TempList.Count; j++)
                        {
                            itm.SetValue(TempList[j], j);
                        }
                        dt.LoadDataRow(itm, true);
                    }
                }
                return dt;
            }
     /// <summary>  
            /// DataTable转化为List集合  
            /// </summary>  
            /// <typeparam name="T">实体对象</typeparam>  
            /// <param name="dt">datatable表</param>  
            /// <param name="isStoreDB">是否存入数据库datetime字段,date字段没事,取出不用判断</param>  
            /// <returns>返回list集合</returns>  
            public static List<T> TableToList<T>(DataTable dt, bool isStoreDB = true)
            {
                List<T> list = new List<T>();
                Type type = typeof(T);
                List<string> listColums = new List<string>();
                foreach (DataRow row in dt.Rows)
                {
                    PropertyInfo[] pArray = type.GetProperties(); //集合属性数组  
                    T entity = Activator.CreateInstance<T>(); //新建对象实例  
                    foreach (PropertyInfo p in pArray)
                    {
                        if (!dt.Columns.Contains(p.Name) || row[p.Name] == null || row[p.Name] == DBNull.Value)
                        {
                            continue;  //DataTable列中不存在集合属性或者字段内容为空则,跳出循环,进行下个循环  
                        }
                        if (isStoreDB && p.PropertyType == typeof(DateTime) && Convert.ToDateTime(row[p.Name]) < Convert.ToDateTime("1753-01-01"))
                        {
                            continue;
                        }
                        try
                        {
                            var obj = Convert.ChangeType(row[p.Name], p.PropertyType);//类型强转,将table字段类型转为集合字段类型  
                            p.SetValue(entity, obj, null);
                        }
                        catch (Exception)
                        {
                            // throw;  
                        }
                        //if (row[p.Name].GetType() == p.PropertyType)  
                        //{  
                        //    p.SetValue(entity, row[p.Name], null); //如果不考虑类型异常,foreach下面只要这一句就行  
                        //}  
                        //object obj = null;  
                        //if (ConvertType(row[p.Name], p.PropertyType,isStoreDB, out obj))  
                        //{                      
                        //    p.SetValue(entity, obj, null);  
                        //}  
                    }
                    list.Add(entity);
                }
                return list;
            }
  • 相关阅读:
    实验三
    第六七章读后感
    0415评论
    0414-复利计算
    实验8 201306114104彭得源
    实验7 201306114104彭得源
    实验6 201306114104彭得源
    android实验五201306114104彭得源
    android实验四201306114104彭得源
    实验五 04彭得源
  • 原文地址:https://www.cnblogs.com/GoCircle/p/6830130.html
Copyright © 2020-2023  润新知