확장 방법(1) DataTable 및 List 상호 변환

2796 단어 Datatable
public static class DataTableExtensions
    {

        /// <summary>
        /// DataTable    List   
        /// </summary>
        /// <typeparam name="TResult">  </typeparam>
        /// <param name="dt">DataTable</param>
        /// <returns></returns>
        public static List<TResult> ToList<TResult>(this DataTable dt) where TResult : class,new()  
        {
            //         
            List<PropertyInfo> prlist = new List<PropertyInfo>();
            //  TResult            
            Type t = typeof(TResult);
            //  TResult     Public       TResult   DataTable         (PropertyInfo)          
            Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); });
            //       
            List<TResult> oblist = new List<TResult>();
            
            foreach (DataRow row in dt.Rows)
            {
                //  TResult   
                TResult ob = new TResult();
                //            
                prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null); });
                //         .
                oblist.Add(ob);
            }
            return oblist;
        }
    }
/// <summary>
        ///      DataTable
        /// </summary>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="value"></param>
        /// <returns></returns>
        public static DataTable ToDataTable<TResult>(this IEnumerable<TResult> value) where TResult : class
        {
            //       
            List<PropertyInfo> pList = new List<PropertyInfo>();
            //       
            Type type = typeof(TResult);
            DataTable dt = new DataTable();
            //    public           DataTable  
            Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p);dt.Columns.Add(p.Name, p.PropertyType); });      
            foreach (var item in value)
            {
                //    DataRow  
                DataRow row = dt.NewRow();
                // row   
                pList.ForEach(p => row[p.Name] = p.GetValue(item, null));
                //   DataTable
                dt.Rows.Add(row);
            }
            return dt;
        }
    }

좋은 웹페이지 즐겨찾기