zoukankan      html  css  js  c++  java
  • 完整DataTable与IList互换(转)

    public class CollectionHelper  
    {  
        private CollectionHelper()  
        {  
        }  
      
        public static DataTable ConvertTo<T>(IList<T> list)  
        {  
            DataTable table = CreateTable<T>();  
            Type entityType = typeof(T);  
            PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);  
      
            foreach (T item in list)  
            {  
                DataRow row = table.NewRow();  
      
                foreach (PropertyDescriptor prop in properties)  
                {  
                    row[prop.Name] = prop.GetValue(item);  
                }  
      
                table.Rows.Add(row);  
            }  
      
            return table;  
        }  
      
        public static IList<T> ConvertTo<T>(IList<DataRow> rows)  
        {  
            IList<T> list = null;  
      
            if (rows != null)  
            {  
                list = new List<T>();  
      
                foreach (DataRow row in rows)  
                {  
                    T item = CreateItem<T>(row);  
                    list.Add(item);  
                }  
            }  
      
            return list;  
        }  
      
        public static IList<T> ConvertTo<T>(DataTable table)  
        {  
            if (table == null)  
            {  
                return null;  
            }  
      
            List<DataRow> rows = new List<DataRow>();  
      
            foreach (DataRow row in table.Rows)  
            {  
                rows.Add(row);  
            }  
      
            return ConvertTo<T>(rows);  
        }  
      
        public static T CreateItem<T>(DataRow row)  
        {  
            T obj = default(T);  
            if (row != null)  
            {  
                obj = Activator.CreateInstance<T>();  
      
                foreach (DataColumn column in row.Table.Columns)  
                {  
                    PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName);  
                    try  
                    {  
                        object value = row[column.ColumnName];  
                        prop.SetValue(obj, value, null);  
                    }  
                    catch  
                    {  
                        // You can log something here  
                        throw;  
                    }  
                }  
            }  
      
            return obj;  
        }  
      
        public static DataTable CreateTable<T>()  
        {  
            Type entityType = typeof(T);  
            DataTable table = new DataTable(entityType.Name);  
            PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);  
      
            foreach (PropertyDescriptor prop in properties)  
            {  
                table.Columns.Add(prop.Name, prop.PropertyType);  
            }  
      
            return table;  
        }  
    }  
      
      
    To see the full code in action, check this sample out:  
      
    public class MyClass  
    {  
        public static void Main()  
        {  
            List<Customer> customers = new List<Customer>();  
      
            for (int i = 0; i < 10; i++)  
            {  
                Customer c = new Customer();  
                c.Id = i;  
                c.Name = "Customer " + i.ToString();  
      
                customers.Add(c);  
            }  
      
            DataTable table = CollectionHelper.ConvertTo<Customer>(customers);  
      
            foreach (DataRow row in table.Rows)  
            {  
                Console.WriteLine("Customer");  
                Console.WriteLine("---------------");  
      
                foreach (DataColumn column in table.Columns)  
                {  
                    object value = row[column.ColumnName];  
                    Console.WriteLine("{0}: {1}", column.ColumnName, value);  
                }  
      
                Console.WriteLine();  
            }  
      
            RL();  
        }  
     
        #region Helper methods  
      
        private static void WL(object text, params object[] args)  
        {  
            Console.WriteLine(text.ToString(), args);  
        }  
      
        private static void RL()  
        {  
            Console.ReadLine();  
        }  
      
        private static void Break()  
        {  
            System.Diagnostics.Debugger.Break();  
        }  
     
        #endregion  
    }  
    完整DataTable与IList互换
  • 相关阅读:
    事务管理思考
    sleep、yield、wait的区别
    线程异常
    线程
    JAVA线程中断
    volatile synchronized在线程安全上的区别
    jms amqp activemq rabbitmq的区别
    servlet不是线程安全的
    雪花算法
    个人税收申报时候对于“全年一次性奖金“的处理
  • 原文地址:https://www.cnblogs.com/tianjinquan/p/3169002.html
Copyright © 2011-2022 走看看