专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » 繁体字互相转换:DataSet与泛型集合间的互相转换 »正文

繁体字互相转换: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

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: