C# DataTable to List<T> based on reflection.

From

https://www.cnblogs.com/zjbky/p/9242140.html

static class ExtendClass    {        public static List<T> ToDataList<T>(this DataTable dt)        {            var list = new List<T>();            var plist = new List<PropertyInfo>(typeof(T).GetProperties());            foreach (DataRow item in dt.Rows)            {                T s = Activator.CreateInstance<T>();                for (int i = 0; i < dt.Columns.Count; i++)                {                    PropertyInfo info = plist.Find(p => p.Name == dt.Columns[i].ColumnName);                    if (info != null)                    {                        try                        {                            if (!Convert.IsDBNull(item[i]))                            {                                object v = null;                                if (info.PropertyType.ToString().Contains("System.Nullable"))                                {                                    v = Convert.ChangeType(item[i], Nullable.GetUnderlyingType(info.PropertyType));                                }                                else                                {                                    v = Convert.ChangeType(item[i], info.PropertyType);                                }                                info.SetValue(s, v, null);                            }                        }                        catch (Exception ex)                        {                            throw new Exception("字段[" + info.Name + "]转换出错," + ex.Message);                        }                    }                }                list.Add(s);            }            return list;        }    }
(0)

相关推荐