/// /// 类型 /// DataTable /// public static List ToList(this DataTable dt) where T : class,new() //创建一个属性的列表 List prlist = new List(); //获取TResult的类型实例 反射的入口 Type t = typeof(T); //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表 Array.ForEach(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); }); //创建返回的集合 List oblist = new List(); foreach (DataRow row in dt.Rows) //创建TResult的实例 T ob = new T(); //找到对应的数据 并赋值 //prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null); }); prlist.ForEach(p => if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null); if (p.PropertyType == typeof(string)) p.SetValue(ob, string.Empty, null); //放入到返回的集合中. oblist.Add(ob); return oblist;

List<T>转DataTable

public static class ListExtension
        public static DataTable ListConvertDataTable<T>(List<T> model, string TableName) where T : class
                Type value = typeof(T);
                List<PropertyInfo> list = new List<PropertyInfo>(value.GetProperties()); //属性列表
                DataTable table = new DataTable();//实例化datatable
                table.TableName = TableName; //表名
                foreach (var property in list)
                    //获取属性数据类型
                    Type PropertyType = property.PropertyType;
                    //验证数据类型是否为空
                    if (PropertyType.IsGenericType && PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
                        PropertyType = property.PropertyType.GetGenericArguments()[0];
                    table.Columns.Add(property.Name, PropertyType);
                foreach (var dataValue in model)
                    DataRow row = table.NewRow();
                    list.ForEach(p => { row[p.Name] = p.GetValue(dataValue); });
                    table.Rows.Add(row);
                return table;
            catch (Exception ex)
                return null;

  讲DataRow转成Model

        /// <summary>
        /// DataRow 转换成 Model
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dr"></param>
        /// <returns></returns>
        public static T ConvertToModel<T>(this System.Data.DataRow dr) where T : new()
            T model = new T();
            foreach (PropertyInfo pInfo in model.GetType().GetProperties())
                object val = getValueByColumnName(dr, pInfo.Name);
                pInfo.SetValue(model, val, null);
            return model;
        /// <summary>
        /// 获取该列的值
        /// </summary>
        /// <param name="dr"></param>
        /// <param name="columnName"></param>
        /// <returns></returns>
        public static object getValueByColumnName(System.Data.DataRow dr, string columnName)
            if (dr.Table.Columns.IndexOf(columnName) >= 0)
                if (dr[columnName] == DBNull.Value)
                    return null;
                return dr[columnName];
            return null;