alexmen

专注.net软件开发,项目管理体系PMBOK.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

public static IList <T> ConvertToList< T>(DataTable dt) where T : new() { List<T > list = new List< T>(); T model = default (T); foreach (DataRow dr in dt.Rows) { model = Activator.CreateInstance<T >(); PropertyInfo[] propertys = model.GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { if (dt.Columns.Contains(pi.Name)) { if (!pi.CanWrite) continue ; object value = dr[pi.Name]; if (value != DBNull .Value) { pi.SetValue(model, value, null); } else { pi.SetValue(model, null, null ); } } } list.Add(model); } return list; } public static DataTable ToDataTable< T>(IEnumerable <T> list) { List<PropertyInfo > pList = new List< PropertyInfo>(); Type type = typeof (T); DataTable dt = new DataTable(); Array.ForEach<PropertyInfo >(type.GetProperties(), p => { pList.Add(p); Type colType = p.PropertyType; if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof( Nullable<>))) { colType = colType.GetGenericArguments()[0]; } dt.Columns.Add(p.Name, colType); }); foreach (var item in list) { DataRow row = dt.NewRow(); pList.ForEach(p => row[p.Name] = p.GetValue(item, null) == null ? DBNull.Value : p.GetValue(item, null)); dt.Rows.Add(row); } return dt; }



       /// <summary>
        /// C#系统类型转换为SQL数据库类型
        /// </summary>
        /// <param name=" theType"></param>
        /// <returns></returns>
        public static SqlDbType GetDBType(System. Type theType)
        {
            System.Data.SqlClient. SqlParameter p1;
            System.ComponentModel. TypeConverter tc;
            p1 = new System.Data.SqlClient.SqlParameter ();
            tc = System.ComponentModel. TypeDescriptor.GetConverter(p1.DbType);
            if (tc.CanConvertFrom(theType))
            {
                p1.DbType = ( DbType)tc.ConvertFrom(theType.Name);
            }
            else
            {
                //Try brute force
                try
                {
                    p1.DbType = ( DbType)tc.ConvertFrom(theType.Name);
                }
                catch (Exception )
                {
                    //Do Nothing; will return NVarChar as default
                }
            }
            return p1.SqlDbType;
        }

 

posted on 2016-08-02 23:00  alexmen  阅读(3949)  评论(0编辑  收藏  举报