程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#實現DataTable轉換成IList的方法

C#實現DataTable轉換成IList的方法

編輯:關於C語言

本文實例講述了C#實現DataTable轉換成IList的方法。分享給大家供大家參考,具體如下:

在用C#作開發的時候經常要把DataTable轉換成IList;操作DataTable比較麻煩,把DataTable轉換成IList,以對象實體作為IList的元素,操作起來就非常方便。

注意:實體的屬性必須和數據庫中的字段必須一一對應,或者數據庫字段名.ToLower().Contains(實體屬性名.ToLower())

數據類型暫時至支持int、string、DateTime、float、double

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Reflection; namespace TBToListTest { public class TBToList<T> where T : new() { /// <summary> /// 獲取列名集合 /// </summary> private IList<string> GetColumnNames(DataColumnCollection dcc) { IList<string> list = new List<string>(); foreach (DataColumn dc in dcc) { list.Add(dc.ColumnName); } return list; } /// <summary> ///屬性名稱和類型名的鍵值對集合 /// </summary> private Hashtable GetColumnType(DataColumnCollection dcc) { if (dcc == null || dcc.Count == 0) { return null; } IList<string> colNameList = GetColumnNames(dcc); Type t = typeof(T); PropertyInfo[] properties = t.GetPropertIEs(); Hashtable hashtable = new Hashtable(); int i = 0; foreach (PropertyInfo p in propertIEs) { foreach (string col in colNameList) { if (col.ToLower().Contains(p.Name.ToLower())) { hashtable.Add(col, p.PropertyType.ToString() + i++); } } } return hashtable; } /// <summary> /// DataTable轉換成IList /// </summary> /// <param name="dt"></param> /// <returns></returns> public IList<T> ToList(DataTable dt) { if (dt == null || dt.Rows.Count == 0) { return null; } PropertyInfo[] propertIEs = typeof(T).GetPropertIEs();//獲取實體類型的屬性集合 Hashtable hh = GetColumnType(dt.Columns);//屬性名稱和類型名的鍵值對集合 IList<string> colNames = GetColumnNames(hh);//按照屬性順序的列名集合 List<T> list = new List<T>(); T model = default(T); foreach (DataRow dr in dt.Rows) { model = new T();//創建實體 int i = 0; foreach (PropertyInfo p in propertIEs) { if (p.PropertyType == typeof(string)) { p.SetValue(model, dr[colNames[i++]], null); } else if (p.PropertyType == typeof(int)) { p.SetValue(model, int.Parse(dr[colNames[i++]].ToString()), null); } else if (p.PropertyType == typeof(DateTime)) { p.SetValue(model, DateTime.Parse(dr[colNames[i++]].ToString()), null); } else if (p.PropertyType == typeof(float)) { p.SetValue(model, float.Parse(dr[colNames[i++]].ToString()), null); } else if (p.PropertyType == typeof(double)) { p.SetValue(model, double.Parse(dr[colNames[i++]].ToString()), null); } } list.Add(model); } return list; } /// <summary> /// 按照屬性順序的列名集合 /// </summary> private IList<string> GetColumnNames(Hashtable hh) { PropertyInfo[] propertIEs = typeof(T).GetPropertIEs();//獲取實體類型的屬性集合 IList<string> ilist = new List<string>(); int i = 0; foreach (PropertyInfo p in propertIEs) { ilist.Add(GetKey(p.PropertyType.ToString() + i++, hh)); } return ilist; } /// <summary> /// 根據Value查找Key /// </summary> private string GetKey(string val, Hashtable tb) { foreach (DictionaryEntry de in tb) { if (de.Value.ToString() == val) { return de.Key.ToString(); } } return null; } } } ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 namespace TBToListTest { //實體 public class Person { public int ID { set; get; } public string Name { set; get; } public string Age { set; get; } public string Lover { set; get; } } } ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 using System; using System.Data; namespace TBToListTest { class Program { static void Main(string[] args) { TBToList<Person> tol = new TBToList<Person>(); Console.WriteLine(); DataTable dt = GetTable(); tol.ToList(dt); Console.Read(); } public static DataTable GetTable() { DataTable dt = new DataTable(); dt.Columns.Add("ID"); dt.Columns.Add("Age"); dt.Columns.Add("Lover"); dt.Columns.Add("Name"); DataRow dr = dt.NewRow(); dr["ID"] = 1; dr["Age"] = "Age1"; dr["Lover"] = "Lover1"; dr["Name"] = "Name1"; dt.Rows.Add(dr); DataRow dr1 = dt.NewRow(); dr1["ID"] = 2; dr1["Age"] = "Age2"; dr1["Lover"] = "Lover2"; dr1["Name"] = "Name2"; dt.Rows.Add(dr1); return dt; } } }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved