首页 > 代码库 > datatable和list的转换

datatable和list的转换

在开发中,把查询结果以DataTable返回很方便,但是在检索数据时又很麻烦,没有list<T>检索方便。但是数据以ILIST形式返回,就为我们在.NET中使用传统的数据绑定造成了不便。下面介绍datatable和list的相互转换

 

1.datatable转换为list

public List<T> GetList<T>(DataTable table)        {            List<T> list = new List<T>();            T t = default(T);            PropertyInfo[] propertypes = null;            string tempName = string.Empty;            foreach (DataRow row in table.Rows)            {                t = Activator.CreateInstance<T>();                propertypes = t.GetType().GetProperties();                foreach (PropertyInfo pro in propertypes)                {                    tempName = pro.Name;                    if (table.Columns.Contains(tempName))                    {                        object value =http://www.mamicode.com/ row[tempName];                        if (!value.ToString().Equals(""))                        {                            pro.SetValue(t, value, null);                        }                    }                }                list.Add(t);            }            return list.Count == 0 ? null : list;        }

2.list转换为datatable

 public 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 (dt.Columns[name] == null)                    {                        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;        }
备注
 
以上转换,由于使用泛型,所以要求调用时,list对应的属性定义必须跟datatable的属性一致。不然可能会导致转换后,数据丢失。

datatable和list的转换