首页 > 编程 > C# > 正文

C#实现DataTable转换成IList的方法

2020-01-24 01:14:31
字体:
来源:转载
供稿:网友

本文实例讲述了C#实现DataTable转换成IList的方法。分享给大家供大家参考,具体如下:

在用C#作开发的时候经常要把DataTable转换成IList;操作DataTable比较麻烦,把DataTable转换成IList,以对象实体作为IList的元素,操作起来就非常方便。

注意:实体的属性必须和数据库中的字段必须一一对应,或者数据库字段名.ToLower().Contains(实体属性名.ToLower())

数据类型暂时至支持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>    ///属性名称和类型名的键值对集合    /// </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;    }  }}
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;    }  }}
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;    }  }}

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#数据结构与算法教程》、《C#常见控件用法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结

希望本文所述对大家C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表