zoukankan      html  css  js  c++  java
  • DataTable转换为IList

    view plaincopy to clipboardprint?
    /// <summary>  
    /// 转换工具类  
    /// </summary>  
    /// <typeparam name="T"></typeparam>  
    public class ConvertHelper<T> where T : new()  
    {  
        /// <summary>  
        /// DataTable转换为IList  
        /// </summary>  
        /// <param name="dt"></param>  
        /// <returns></returns>  
        public static IList<T> ConvertToIList(DataTable dt)  
        {  
            // 定义集合   
            IList<T> list = new List<T>();  
            // 获得此模型的类型   
            Type type = typeof(T);  
            string tempName = "";  
            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);  
                    }  
                }  
                list.Add(t);  
            }  
            return list;  
        }  
     
        /// <summary>  
        /// Ilist 转换成 DataSet  
        /// </summary>  
        /// <param name="list"></param>  
        /// <returns></returns>  
        public static DataSet ConvertToDataSet<T>(IList<T> list)  
        {  
            DataSet ds = new DataSet();  
            ds.Tables.Add(ConvertToDataTable<T>(list));  
            return ds;  
        }  
     
        /// <summary>  
        /// Ilist 转换成 DataTable  
        /// </summary>  
        /// <param name="list"></param>  
        /// <returns></returns>  
        public static DataTable ConvertToDataTable<T>(IList<T> list)  
        {  
            if (list == null || list.Count <= 0)  
            {  
                return null;  
            }  
            DataTable dt = new DataTable(typeof(T).Name);  
            DataColumn column;  
            DataRow row;  
            PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);  
            foreach (T t in list)  
            {  
                if (t == null)  
                {  
                    continue;  
                }  
                row = dt.NewRow();  
                for (int i = 0, j = myPropertyInfo.Length; i < j; i++)  
                {  
                    PropertyInfo pi = myPropertyInfo[i];  
                    string name = pi.Name;  
                    if (dt.Columns[name] == null)  
                    {  
                        column = new DataColumn(name, pi.PropertyType);  
                        dt.Columns.Add(column);  
                    }  
                    row[name] = pi.GetValue(t, null);  
                }  
                dt.Rows.Add(row);  
            }  
            return dt;  
        }  
     


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Hope94/archive/2010/08/05/5790185.aspx

  • 相关阅读:
    Java的错误类型
    交换两个变量的值
    变量的自增、自减、自乘、自除运算
    通过Scanner从控制台获取数据
    通过args数组获取数据
    int类型与char类型的转换
    大类型向小类型转换
    小类型向大类型转换
    6 高级2 自连接 视图
    5 高级 关系 连接
  • 原文地址:https://www.cnblogs.com/scgw/p/1975054.html
Copyright © 2011-2022 走看看