#region
数据集互操作
/// <summary>
/// 将集合类转换成DataTable
/// </summary>
/// <param name="list"> 集合 </param>
/// <returns></returns>
public static DataTable ToDataTable(IList list)
{
DataTable result = new DataTable();
if (list.Count > 0 )
{
PropertyInfo[] propertys = list[ 0 ].GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
result.Columns.Add(pi.Name, pi.PropertyType);
}
for ( int i = 0 ; i < list.Count; i ++ )
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in propertys)
{
object obj = pi.GetValue(list[i], null );
tempList.Add(obj);
}
object [] array = tempList.ToArray();
result.LoadDataRow(array, true );
}
}
return result;
}
/// <summary>
/// 将泛型集合类转换成DataTable
/// </summary>
/// <typeparam name="T"> 集合项类型 </typeparam>
/// <param name="list"> 集合 </param>
/// <returns> 数据集(表) </returns>
public static DataTable ToDataTable < T > (IList < T > list)
{
return ConvertX.ToDataTable < T > (list, null );
}
/// <summary>
/// 将泛型集合类转换成DataTable
/// </summary>
/// <typeparam name="T"> 集合项类型 </typeparam>
/// <param name="list"> 集合 </param>
/// <param name="propertyName"> 需要返回的列的列名 </param>
/// <returns> 数据集(表) </returns>
public static DataTable ToDataTable < T > (IList < T > list, params string [] propertyName)
{
List < string > propertyNameList = new List < string > ();
if (propertyName != null )
propertyNameList.AddRange(propertyName);
DataTable result = new DataTable();
if (list.Count > 0 )
{
PropertyInfo[] propertys = list[ 0 ].GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
if (propertyNameList.Count == 0 )
{
result.Columns.Add(pi.Name, pi.PropertyType);
}
else
{
if (propertyNameList.Contains(pi.Name))
result.Columns.Add(pi.Name, pi.PropertyType);
}
}
for ( int i = 0 ; i < list.Count; i ++ )
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in propertys)
{
if (propertyNameList.Count == 0 )
{
object obj = pi.GetValue(list[i], null );
tempList.Add(obj);
}
else
{
if (propertyNameList.Contains(pi.Name))
{
object obj = pi.GetValue(list[i], null );
tempList.Add(obj);
}
}
}
object [] array = tempList.ToArray();
result.LoadDataRow(array, true );
}
}
return result;
}
#endregion
}
public class ConvertXToDataTableTester : ITest
{
#region ITest 成员
public string Name
{
get { return new ConvertXToDataTableTester().GetType().Name; }
}
public void StartRuntime()
{
// Test1(ToDataTable<>):boundary
CollectionBase < Item > items1 = new CollectionBase < Item > ();
items1.Add( new Item( " item1_1 " , 1 ));
items1.Add( new Item( " item1_2 " , " null " ));
items1.Add( new Item( " item1_3 " , 3 ));
DataTable dt = ConvertX.ToDataTable < Item > (items1);
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine( " {0},{1} " , dr[ " text " ].ToString(), dr[ 1 ].ToString());
}
// Test2(ToDataTable):
ArrayList items2 = new ArrayList();
items2.Add( new Item( " item2_1 " , 3 ));
items2.Add( new Item( " item2_2 " , 4 ));
items2.Add( new Item( " item2_3 " , 5 ));
DataTable dt2 = ConvertX.ToDataTable(items2);
foreach (DataRow dr in dt2.Rows)
{
Console.WriteLine( " {0},{1} " , dr[ " text " ].ToString(), dr[ 1 ].ToString());
}
// Test3(ToDataTable<>):
IList < Item > items3 = new CollectionBase < Item > ();
items3.Add( new Item( " item3_1 " , 3 ));
items3.Add( new Item( " item3_2 " , 4 ));
items3.Add( new Item( " item3_3 " , 5 ));
DataTable dt3 = ConvertX.ToDataTable < Item > (items3, " Text " );
foreach (DataRow dr in dt3.Rows)
{
// Console.WriteLine("{0},{1}", dr["text"].ToString(), dr[1].ToString());
Console.WriteLine( " {0} " , dr[ " text " ].ToString());
}
// Test4(ToDataTable<>):Error with error column name
try
{
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine(dr[ " errorName " ].ToString());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
#endregion
}
public class Item
{
public Item( string text, object value)
{
this .text = text;
this .value = value;
}
private string text;
public string Text
{
get
{
return this .text;
}
set
{
this .text = value;
}
}
private object value;
public object Value
{
get
{
return this .value;
}
set
{
this .value = value;
}
}
}
/// <summary>
/// 将集合类转换成DataTable
/// </summary>
/// <param name="list"> 集合 </param>
/// <returns></returns>
public static DataTable ToDataTable(IList list)
{
DataTable result = new DataTable();
if (list.Count > 0 )
{
PropertyInfo[] propertys = list[ 0 ].GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
result.Columns.Add(pi.Name, pi.PropertyType);
}
for ( int i = 0 ; i < list.Count; i ++ )
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in propertys)
{
object obj = pi.GetValue(list[i], null );
tempList.Add(obj);
}
object [] array = tempList.ToArray();
result.LoadDataRow(array, true );
}
}
return result;
}
/// <summary>
/// 将泛型集合类转换成DataTable
/// </summary>
/// <typeparam name="T"> 集合项类型 </typeparam>
/// <param name="list"> 集合 </param>
/// <returns> 数据集(表) </returns>
public static DataTable ToDataTable < T > (IList < T > list)
{
return ConvertX.ToDataTable < T > (list, null );
}
/// <summary>
/// 将泛型集合类转换成DataTable
/// </summary>
/// <typeparam name="T"> 集合项类型 </typeparam>
/// <param name="list"> 集合 </param>
/// <param name="propertyName"> 需要返回的列的列名 </param>
/// <returns> 数据集(表) </returns>
public static DataTable ToDataTable < T > (IList < T > list, params string [] propertyName)
{
List < string > propertyNameList = new List < string > ();
if (propertyName != null )
propertyNameList.AddRange(propertyName);
DataTable result = new DataTable();
if (list.Count > 0 )
{
PropertyInfo[] propertys = list[ 0 ].GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
if (propertyNameList.Count == 0 )
{
result.Columns.Add(pi.Name, pi.PropertyType);
}
else
{
if (propertyNameList.Contains(pi.Name))
result.Columns.Add(pi.Name, pi.PropertyType);
}
}
for ( int i = 0 ; i < list.Count; i ++ )
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in propertys)
{
if (propertyNameList.Count == 0 )
{
object obj = pi.GetValue(list[i], null );
tempList.Add(obj);
}
else
{
if (propertyNameList.Contains(pi.Name))
{
object obj = pi.GetValue(list[i], null );
tempList.Add(obj);
}
}
}
object [] array = tempList.ToArray();
result.LoadDataRow(array, true );
}
}
return result;
}
#endregion
}
public class ConvertXToDataTableTester : ITest
{
#region ITest 成员
public string Name
{
get { return new ConvertXToDataTableTester().GetType().Name; }
}
public void StartRuntime()
{
// Test1(ToDataTable<>):boundary
CollectionBase < Item > items1 = new CollectionBase < Item > ();
items1.Add( new Item( " item1_1 " , 1 ));
items1.Add( new Item( " item1_2 " , " null " ));
items1.Add( new Item( " item1_3 " , 3 ));
DataTable dt = ConvertX.ToDataTable < Item > (items1);
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine( " {0},{1} " , dr[ " text " ].ToString(), dr[ 1 ].ToString());
}
// Test2(ToDataTable):
ArrayList items2 = new ArrayList();
items2.Add( new Item( " item2_1 " , 3 ));
items2.Add( new Item( " item2_2 " , 4 ));
items2.Add( new Item( " item2_3 " , 5 ));
DataTable dt2 = ConvertX.ToDataTable(items2);
foreach (DataRow dr in dt2.Rows)
{
Console.WriteLine( " {0},{1} " , dr[ " text " ].ToString(), dr[ 1 ].ToString());
}
// Test3(ToDataTable<>):
IList < Item > items3 = new CollectionBase < Item > ();
items3.Add( new Item( " item3_1 " , 3 ));
items3.Add( new Item( " item3_2 " , 4 ));
items3.Add( new Item( " item3_3 " , 5 ));
DataTable dt3 = ConvertX.ToDataTable < Item > (items3, " Text " );
foreach (DataRow dr in dt3.Rows)
{
// Console.WriteLine("{0},{1}", dr["text"].ToString(), dr[1].ToString());
Console.WriteLine( " {0} " , dr[ " text " ].ToString());
}
// Test4(ToDataTable<>):Error with error column name
try
{
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine(dr[ " errorName " ].ToString());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
#endregion
}
public class Item
{
public Item( string text, object value)
{
this .text = text;
this .value = value;
}
private string text;
public string Text
{
get
{
return this .text;
}
set
{
this .text = value;
}
}
private object value;
public object Value
{
get
{
return this .value;
}
set
{
this .value = value;
}
}
}
public
interface
ITest
{
string Name { get; }
void StartRuntime();
}
{
string Name { get; }
void StartRuntime();
}
using
System;
using System.Collections.Generic;
using System.Text;
using yd.Base;
using yd.Base.Collections.Generic;
using yd.Util;
namespace ConsoleApplicationTester
{
class Program
{
static void Main(string[] args)
{
bool debugging = false;
CollectionBase<ITest> testers = new CollectionBase<ITest>();
//testers.Add(new QuarterTester());
//testers.Add(new ConvertXToDataTableTester());
foreach (ITest tester in testers)
{
if (debugging == false)
{
try
{
tester.StartRuntime();
Console.WriteLine("___________________________________");
Console.WriteLine(tester.Name + " succeed!");
}
catch (Exception ex)
{
Console.WriteLine(tester.Name + " with errors!");
Console.WriteLine("____________The error is under the line!__________");
Console.WriteLine(ex.Message);
Console.WriteLine("!!!!!!!!!!!!!!!!!!!!@@@@@@@!!!!!!!!!!!!!!!!!!!!");
}
}
else
{
tester.StartRuntime();
Console.WriteLine("___________________________________");
Console.WriteLine(tester.Name + " succeed!");
}
}
}
}
}
using System.Collections.Generic;
using System.Text;
using yd.Base;
using yd.Base.Collections.Generic;
using yd.Util;
namespace ConsoleApplicationTester
{
class Program
{
static void Main(string[] args)
{
bool debugging = false;
CollectionBase<ITest> testers = new CollectionBase<ITest>();
//testers.Add(new QuarterTester());
//testers.Add(new ConvertXToDataTableTester());
foreach (ITest tester in testers)
{
if (debugging == false)
{
try
{
tester.StartRuntime();
Console.WriteLine("___________________________________");
Console.WriteLine(tester.Name + " succeed!");
}
catch (Exception ex)
{
Console.WriteLine(tester.Name + " with errors!");
Console.WriteLine("____________The error is under the line!__________");
Console.WriteLine(ex.Message);
Console.WriteLine("!!!!!!!!!!!!!!!!!!!!@@@@@@@!!!!!!!!!!!!!!!!!!!!");
}
}
else
{
tester.StartRuntime();
Console.WriteLine("___________________________________");
Console.WriteLine(tester.Name + " succeed!");
}
}
}
}
}
CollectionBase<T>: 泛型集合类型,赋予集合业务意义,增强集合的抽象使用