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
    }
    

      

  • 相关阅读:
    [杂谈]关于前端如何学习框架的一点牢骚
    【2018】面试复习大纲
    迟来的2017总结
    [转载并收藏]JavaScript 疲劳终极指南:我们行业的真相
    想做好产品,一定要成为自己产品的用户
    2017年个人提升计划
    Chrome新发现
    不要被所在的公司或企业绑架
    半夜不想睡有感
    2016年总结
  • 原文地址:https://www.cnblogs.com/sdaulldd/p/6270025.html
Copyright © 2011-2022 走看看