zoukankan      html  css  js  c++  java
  • datatable 和list 互转

    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
    }
    

      

  • 相关阅读:
    Hibernate连接mysql数据库的配置
    opendaynight(karaf) 和 mininet测试openflow
    电信新势力,TIP/CORD能颠覆电信设备商吗?
    minnet sample
    ONIE
    升级Mininet自带的OpenvSwitch & 编译OpenvSwitch
    mininet test
    dpctl 命令实践
    白盒交换机
    Wedge 100-32X 100GbE Data Center Switch
  • 原文地址:https://www.cnblogs.com/sdaulldd/p/6270025.html
Copyright © 2011-2022 走看看