国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C# > 正文

C#實(shí)現(xiàn)DataTable轉(zhuǎn)換成IList的方法

2020-01-24 01:14:31
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了C#實(shí)現(xiàn)DataTable轉(zhuǎn)換成IList的方法。分享給大家供大家參考,具體如下:

在用C#作開(kāi)發(fā)的時(shí)候經(jīng)常要把DataTable轉(zhuǎn)換成IList;操作DataTable比較麻煩,把DataTable轉(zhuǎn)換成IList,以對(duì)象實(shí)體作為IList的元素,操作起來(lái)就非常方便。

注意:實(shí)體的屬性必須和數(shù)據(jù)庫(kù)中的字段必須一一對(duì)應(yīng),或者數(shù)據(jù)庫(kù)字段名.ToLower().Contains(實(shí)體屬性名.ToLower())

數(shù)據(jù)類(lèi)型暫時(shí)至支持int、string、DateTime、float、double

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>    ///屬性名稱(chēng)和類(lèi)型名的鍵值對(duì)集合    /// </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轉(zhuǎn)換成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();//獲取實(shí)體類(lèi)型的屬性集合      Hashtable hh = GetColumnType(dt.Columns);//屬性名稱(chēng)和類(lèi)型名的鍵值對(duì)集合      IList<string> colNames = GetColumnNames(hh);//按照屬性順序的列名集合      List<T> list = new List<T>();      T model = default(T);      foreach (DataRow dr in dt.Rows)      {        model = new T();//創(chuàng)建實(shí)體        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();//獲取實(shí)體類(lèi)型的屬性集合      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>    /// 根據(jù)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;    }  }}
namespace TBToListTest{  //實(shí)體  public class Person  {    public int ID    {      set;      get;    }    public string Name    {      set;      get;    }    public string Age    {      set;      get;    }    public string Lover    {      set;      get;    }  }}
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;    }  }}

更多關(guān)于C#相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#常見(jiàn)控件用法教程》、《C#面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》及《C#程序設(shè)計(jì)之線程使用技巧總結(jié)

希望本文所述對(duì)大家C#程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 仁怀市| 东港市| 台南县| 金坛市| 南京市| 榕江县| 墨玉县| 财经| 泾川县| 久治县| 郑州市| 沙洋县| 牙克石市| 定兴县| 裕民县| 霍城县| 禄劝| 通榆县| 定州市| 青冈县| 贞丰县| 大兴区| 无锡市| 盱眙县| 兴山县| 钦州市| 皋兰县| 房山区| 鄂州市| 平山县| 阿鲁科尔沁旗| 礼泉县| 商水县| 中阳县| 安康市| 望江县| 吉安市| 蓬莱市| 将乐县| 金华市| 施甸县|