zoukankan      html  css  js  c++  java
  • C#;DataTable添加列;DataTable转List泛型集合;List泛型集合转DataTable泛型集合;

    给DataTable添加列

     string sql = "select * from cgpmb order by code";
                DataTable dt = Bobole.Data.OracleDataRegester.GetListBySql(sql).Tables[0];
                dt.Columns.Add("PCode", typeof(string));     //假如数据库查询出来的DataTable没有你想要的列   Remove("")可以删除列
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    try
                    {
                        dt.Rows[i]["PCode"] = dt.Rows[i]["Code"].ToString().Remove(dt.Rows[i]["Code"].ToString().Length - 2, 2);
                    }
                    catch (Exception)
                    {
                        dt.Rows[i]["PCode"] = "";
                    }
                }

    将DataTable转化为list泛型集合

            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>();
                PropertyInfo[] pArray = type.GetProperties(); //集合属性数组
                foreach (DataRow row in dt.Rows)
                {
                    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;
                        }
                    }
                    list.Add(entity);
                }
                return list;
            }

     将list泛型集合转化为DataTable

            /// <summary>    
            /// 转化一个DataTable    
            /// </summary>    
            /// <typeparam name="T"></typeparam>    
            /// <param name="list"></param>    
            /// <returns></returns>    
            private static System.Data.DataTable ToDataTable<T>(IEnumerable<T> list)
            {
                //创建属性的集合    
                List<PropertyInfo> pList = new List<PropertyInfo>();
                //获得反射的入口    
                Type type = typeof(T);
                System.Data.DataTable dt = new System.Data.DataTable();
                //把所有的public属性加入到集合 并添加DataTable的列    
                Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); });
                foreach (var item in list)
                {
                    //创建一个DataRow实例    
                    DataRow row = dt.NewRow();
                    //给row 赋值    
                    pList.ForEach(p => row[p.Name] = p.GetValue(item, null));
                    //加入到DataTable    
                    dt.Rows.Add(row);
                }
                return dt;
            }
  • 相关阅读:
    Code First 迁移----官方 应用程序启动时自动升级(MigrateDatabaseToLatestVersion 初始值设定项)
    使用 Entity Framework Core 时,通过代码自动 Migration
    泛型反射获取特性值
    使用Expression动态创建lambda表达式
    ElasticSearch + Logstash + Kibana 搭建笔记
    PHP获取指定函数定义在哪个文件中及行号
    Wordpress中文章的特色图像Featured Image究竟存在哪里?
    PhpSpreadsheet生成Excel时实现单元格自动换行
    Composer使用体验
    PHP命名空间学习笔记
  • 原文地址:https://www.cnblogs.com/-hao/p/9628206.html
Copyright © 2011-2022 走看看