zoukankan      html  css  js  c++  java
  • C# List<T>转成DataTable

            //将List<T>转成DataTable
            public static DataTable ToDataTable(List<T> collection)
            {
                var props = typeof(T).GetProperties();
                var dt = new DataTable();
                dt.Columns.AddRange(props.Select(p => new DataColumn(p.Name, p.PropertyType)).ToArray());
                if (collection.Count() > 0)
                {
                    for (int i = 0; i < collection.Count(); i++)
                    {
                        ArrayList tempList = new ArrayList();
                        foreach (PropertyInfo pi in props)
                        {
                            object obj = pi.GetValue(collection.ElementAt(i), null);
                            tempList.Add(obj);
                        }
                        object[] array = tempList.ToArray();
                        dt.LoadDataRow(array, true);
                    }
                }
                return dt;
            }

    public static class Extension
        {
            public static DataTable ListToDataTable<T>(this IList<T> data, string tableName)
            {
                DataTable table = new DataTable(tableName);
    
                //special handling for value types and string
                if (typeof(T).IsValueType || typeof(T).Equals(typeof(string)))
                {
    
                    DataColumn dc = new DataColumn("Value");
                    table.Columns.Add(dc);
                    foreach (T item in data)
                    {
                        DataRow dr = table.NewRow();
                        dr[0] = item;
                        table.Rows.Add(dr);
                    }
                }
                else
                {
                    PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
                    foreach (PropertyDescriptor prop in properties)
                    {
                        table.Columns.Add(prop.Name,
                        Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
                    }
                    foreach (T item in data)
                    {
                        DataRow row = table.NewRow();
                        foreach (PropertyDescriptor prop in properties)
                        {
                            try
                            {
                                row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
                            }
                            catch (Exception ex)
                            {
                                row[prop.Name] = DBNull.Value;
                            }
                        }
                        table.Rows.Add(row);
                    }
                }
                return table;
            }
        }
    

      

  • 相关阅读:
    如何选择自动化测试框架
    Android Crash 定位
    Tomcat 高性能实现关键点
    测试用例 自动生成工具PICT与AllPairs
    《活出生命的意义》节选
    java设计模式-Iterator
    java设计模式-State模式
    java设计模式-Command模式
    java设计模式-桥接模式
    小橘灯
  • 原文地址:https://www.cnblogs.com/DONET-LC/p/6263106.html
Copyright © 2011-2022 走看看