#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>:泛型集合类型,赋予集合业务意义,增强集合的抽象使用