您的位置:首页 > 编程语言 > C#

机房重构----C#中将DataTable类型转化为泛型集合

2015-07-31 20:14 495 查看
C#中将DataTable的类型转化为泛型集合IList<>;

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 
using System.Data.SqlClient; 
using System.Reflection; 


public class ConvertHelper

    {

        /// <summary> 

        /// 单表查询结果转换成泛型集合 

        /// </summary> 

        /// <typeparam name="T">泛型集合类型</typeparam> 

        /// <param name="dt">查询结果DataTable</param> 

        /// <returns>以实体类为元素的泛型集合</returns> 

        public static IList<T> convertToList<T>(DataTable dt) where T : new() 

        { 

            // 定义集合 

            List<T> ts = new List<T>(); 

            // 获得此模型的类型 

            Type type = typeof(T); 

            //定义一个临时变量 

             string tempName = string.Empty; 

            //遍历DataTable中所有的数据行  

            foreach (DataRow dr in dt.Rows) 

            { 

                T t = new T(); 

                // 获得此模型的公共属性 

                PropertyInfo[] propertys = t.GetType().GetProperties(); 

                //遍历该对象的所有属性 

                foreach (PropertyInfo pi in propertys) 

                { 

                    tempName = pi.Name;//将属性名称赋值给临时变量   

                    //检查DataTable是否包含此列(列名==对象的属性名)     

                    if (dt.Columns.Contains(tempName)) 

                    { 

                        // 判断此属性是否有Setter   

                        if (!pi.CanWrite) continue;//该属性不可写,直接跳出   

                        //取值   

                        object value = dr[tempName]; 

                        //如果非空,则赋给对象的属性   

                        if (value != DBNull.Value) 

                            pi.SetValue(t, value, null); 

                    } 

                } 

                //对象添加到泛型集合中 

                ts.Add(t); 

            } 

            return ts;   

        } 

    } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: