1 public static DataTable ToDataTable<T>(IList<T> list)
2 {
3 return ToDataTable<T>(list, null);
4 }
5 public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
6 {
7 List<string> propertyNameList = new List<string>();
8 if (propertyName != null)
9 propertyNameList.AddRange(propertyName);
10
11 DataTable result = new DataTable();
12 if (list.Count > 0)
13 {
14 PropertyInfo[] propertys = list[0].GetType().GetProperties();
15 foreach (PropertyInfo pi in propertys)
16 {
17 if (propertyNameList.Count == 0)
18 {
19 result.Columns.Add(pi.Name);
20
21 }
22 else
23 {
24 if (propertyNameList.Contains(pi.Name))
25 result.Columns.Add(pi.Name);
26
27 }
28 }
29
30 for (int i = 0; i < list.Count; i++)
31 {
32 ArrayList tempList = new ArrayList();
33 foreach (PropertyInfo pi in propertys)
34 {
35 if (propertyNameList.Count == 0)
36 {
37 object obj = pi.GetValue(list[i], null);
38 tempList.Add(obj);
39 }
40 else
41 {
42 if (propertyNameList.Contains(pi.Name))
43 {
44 object obj = pi.GetValue(list[i], null);
45 tempList.Add(obj);
46 }
47 }
48 }
49 object[] array = tempList.ToArray();
50 result.LoadDataRow(array, true);
51 }
52 }
53 return result;
54 }