栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

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

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

本文实例讲述了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 where T : new()
  {
    /// 
    /// 获取列名集合
    /// 
    private IList GetColumnNames(DataColumnCollection dcc)
    {
      IList list = new List();
      foreach (DataColumn dc in dcc)
      {
 list.Add(dc.ColumnName);
      }
      return list;
    }
    /// 
    ///属性名称和类型名的键值对集合
    /// 
    private Hashtable GetColumnType(DataColumnCollection dcc)
    {
      if (dcc == null || dcc.Count == 0)
      {
 return null;
      }
      IList 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;
    }
    /// 
    /// DataTable转换成IList
    /// 
    /// 
    /// 
    public IList ToList(DataTable dt)
    {
      if (dt == null || dt.Rows.Count == 0)
      {
 return null;
      }
      PropertyInfo[] properties = typeof(T).GetProperties();//获取实体类型的属性集合
      Hashtable hh = GetColumnType(dt.Columns);//属性名称和类型名的键值对集合
      IList colNames = GetColumnNames(hh);//按照属性顺序的列名集合
      List list = new List();
      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;
    }
    /// 
    /// 按照属性顺序的列名集合
    /// 
    private IList GetColumnNames(Hashtable hh)
    {
      PropertyInfo[] properties = typeof(T).GetProperties();//获取实体类型的属性集合
      IList ilist = new List();
      int i = 0;
      foreach (PropertyInfo p in properties)
      {
 ilist.Add(GetKey(p.PropertyType.ToString() + i++, hh));
      }
      return ilist;
    }
    /// 
    /// 根据Value查找Key
    /// 
    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 tol = new TBToList();
      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#程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/124378.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号