繁体字互相转换:DataSet与泛型集合间的互相转换来源: 发布时间:星期四, 2009年2月12日 浏览:157次 评论:0
在网上曾经看到个将IList类型转换为DataSet文章自己又再其基础的上扩展了下将DataSet转换为IList泛型集合过程也实现了 基本思路 利用反射机制将DataTable字段和自定义类型公开属性互相赋值注意:从DataSet到IList<T>转换自定义类型公开属性必须和DataTable中字段名称致才能到达想要结果建议DataTable定义从数据库来自定义类型用O/R Mapping方式获得 代码介绍说明 /// <summary> /// 泛型集合和DataSet互相转换 /// </summary> public IListDataSet { /// <summary> /// 集合装换DataSet /// </summary> /// <param name="list">集合</param> /// <s></s> /// 2008-08-01 22:08 HPDV2806 public DataSet ToDataSet( IList p_List ) { DataSet result = DataSet; DataTable _DataTable = DataTable; ( p_List.Count > 0 ) { PropertyInfo propertys = p_List[0].GetType.GetProperties; foreach ( PropertyInfo pi in propertys ) { _DataTable.Columns.Add( pi.Name, pi.PropertyType ); } for ( i = 0; i < p_List.Count; i ) { ArrayList tempList = ArrayList; foreach ( PropertyInfo pi in propertys ) { object obj = pi.GetValue( p_List[i], null ); tempList.Add( obj ); } object .gif' /> = tempList.ToArray; _DataTable.LoadDataRow( .gif' />, true ); } } result.Tables.Add( _DataTable ); result; } /// <summary> /// 泛型集合转换DataSet /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list">泛型集合</param> /// <s></s> /// 2008-08-01 22:43 HPDV2806 public DataSet ToDataSet<T>( IList<T> list ) { ToDataSet<T>( list, null ); } /// <summary> /// 泛型集合转换DataSet /// </summary> /// <typeparam name="T"></typeparam> /// <param name="p_List">泛型集合</param> /// <param name="p_PropertyName">待转换属性名</param> /// <s></s> /// 2008-08-01 22:44 HPDV2806 public DataSet ToDataSet<T>( IList<T> p_List, params p_PropertyName ) { List<> propertyNameList = List<>; ( p_PropertyName != null ) propertyNameList.AddRange( p_PropertyName ); DataSet result = DataSet; DataTable _DataTable = DataTable; ( p_List.Count > 0 ) { PropertyInfo propertys = p_List[0].GetType.GetProperties; foreach ( PropertyInfo pi in propertys ) { ( propertyNameList.Count 0 ) { // 没有指定属性情况下全部属性都要转换 _DataTable.Columns.Add( pi.Name, pi.PropertyType ); } { ( propertyNameList.Contains( pi.Name ) ) _DataTable.Columns.Add( pi.Name, pi.PropertyType ); } } for ( i = 0; i < p_List.Count; i ) { ArrayList tempList = ArrayList; foreach ( PropertyInfo pi in propertys ) { ( propertyNameList.Count 0 ) { object obj = pi.GetValue( p_List[i], null ); tempList.Add( obj ); } { ( propertyNameList.Contains( pi.Name ) ) { object obj = pi.GetValue( p_List[i], null ); tempList.Add( obj ); } } } object .gif' /> = tempList.ToArray; _DataTable.LoadDataRow( .gif' />, true ); } } result.Tables.Add( _DataTable ); result; } /// <summary> /// DataSet装换为泛型集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="p_DataSet">DataSet</param> /// <param name="p_TableIndex">待转换数据表索引</param> /// <s></s> /// 2008-08-01 22:46 HPDV2806 public IList<T> DataSetToIList<T>( DataSet p_DataSet, p_TableIndex ) { ( p_DataSet null || p_DataSet.Tables.Count < 0 ) null; ( p_TableIndex > p_DataSet.Tables.Count - 1 ) null; ( p_TableIndex < 0 ) p_TableIndex = 0; DataTable p_Data = p_DataSet.Tables[p_TableIndex]; // 返回值化 IList<T> result = List<T>; for ( j = 0; j < p_Data.Rows.Count; j ) { T _t = (T)Activator.CreateInstance( typeof( T ) ); PropertyInfo propertys = _t.GetType.GetProperties; foreach ( PropertyInfo pi in propertys ) { for ( i = 0; i < p_Data.Columns.Count; i ) { // 属性和字段名称致进行赋值 ( pi.Name.Equals( p_Data.Columns[i].ColumnName ) ) { // 数据库NULL值单独处理 ( p_Data.Rows[j][i] != DBNull.Value ) pi.SetValue( _t, p_Data.Rows[j][i], null ); pi.SetValue( _t, null, null ); ; } } } result.Add( _t ); } result; } /// <summary> /// DataSet装换为泛型集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="p_DataSet">DataSet</param> /// <param name="p_TableName">待转换数据表名称</param> /// <s></s> /// 2008-08-01 22:47 HPDV2806 public IList<T> DataSetToIList<T>( DataSet p_DataSet, p_TableName ) { _TableIndex = 0; ( p_DataSet null || p_DataSet.Tables.Count < 0 ) null; ( .IsNullOrEmpty( p_TableName ) ) null; for ( i = 0; i < p_DataSet.Tables.Count; i ) { // 获取Table名称在Tables集合中索引值 ( p_DataSet.Tables[i].TableName.Equals( p_TableName ) ) { _TableIndex = i; ; } } DataSetToIList<T>( p_DataSet, _TableIndex ); } } 使用范围 1. 可以用在业务层中数据获取获取DataSet同时也可以转为IList集合为者所使用 2. 在WebServices中传输自定义类型使用即传递参数都用DataSet类型(WebServices直接支持数据类型)在使用前将其转换为IList来使用 0
相关文章读者评论发表评论 |