List<T>转DataTable

   /// <summary>
        /// 生成DataTable
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="collection"></param>
        /// <returns></returns>
        private DataTable ListToDataTable<T>(List<T> collection)
        {
            var dt = new DataTable();
            if (collection.Count <= 0) return dt;
            var props = typeof(T).GetProperties();
            dt.Columns.AddRange(props.Select(p =>
            {

                var colType = p.PropertyType;
                if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                {
                    colType = colType.GetGenericArguments()[0];
                }
                var dc = new DataColumn(p.Name, colType);
                return dc;
            }).ToArray());

            for (int i = 0; i < collection.Count; i++)
            {
                var tempList = new ArrayList();
                foreach (PropertyInfo pi in props)
                {
                    object obj = pi.GetValue(collection.ElementAt(i), null);
                    tempList.Add(obj);
                }
                var array = tempList.ToArray();
                dt.LoadDataRow(array, true);
            }
            return dt;
        }
原文地址:https://www.cnblogs.com/FH-cnblogs/p/7809019.html