DataTable泛型 互转

    技术2025-09-18  37

    //使用泛型类List,不用ArrayList,比下面Fill方法的性能提高         //DataTable转泛型         public static IList<T> FillModel(DataTable dt)        {            List<T> l = new List<T>();            T model = default(T);

                foreach (DataRow dr in dt.Rows)            {                model = Activator.CreateInstance<T>();

                    foreach (DataColumn dc in dr.Table.Columns)                {                    PropertyInfo pi = model.GetType().GetProperty(dc.ColumnName);                    if (dr[dc.ColumnName] != DBNull.Value)                    {                        pi.SetValue(model, dr[dc.ColumnName], null);                    }                    else                    {                        pi.SetValue(model, null, null);                    }                }                l.Add(model);            }

                return l;        }

     

    //将泛型类转换成DataTable         public static DataTable Fill<T>(IList<T> objlist)        {            if (objlist == null || objlist.Count <= 0)            {                return null;            }            DataTable dt = new DataTable(typeof(T).Name);            DataColumn column;            DataRow row;

                System.Reflection.PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

                foreach (T t in objlist)            {                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 (dt.Columns[name] == null)                    {                        column = new DataColumn(name, pi.PropertyType);                        dt.Columns.Add(column);                    }

                        row[name] = pi.GetValue(t, null);                }

                    dt.Rows.Add(row);            }            return dt;        }

    最新回复(0)