好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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<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#程序设计有所帮助。

dy("nrwz");

查看更多关于C#实现DataTable转换成IList的方法的详细内容...

  阅读:52次