The method below converts an array of objects to a DataTable object in C#.
http://www.c-sharpcorner.com/blogs/dynamic-objects-conveting-into-data-table-in-c-sharp1
public static DataTable GetDataTableFromObjects(object[] objects) { if (objects != null && objects.Length > 0) { Type t = objects[0].GetType(); DataTable dt = new DataTable(t.Name); foreach (PropertyInfo pi in t.GetProperties()) { dt.Columns.Add(new DataColumn(pi.Name)); } foreach (var o in objects) { DataRow dr = dt.NewRow(); foreach (DataColumn dc in dt.Columns) { dr[dc.ColumnName] = o.GetType().GetProperty(dc.ColumnName).GetValue(o, null); } dt.Rows.Add(dr); } return dt; } return null; }
/// <summary> /// ToDataTable /// </summary> /// <typeparam name="T">实体</typeparam> /// <param name="items">实体集</param> /// <returns></returns> public static DataTable ToDataTable<T>(this IEnumerable<T> items) { var tb = new DataTable(typeof(T).Name); PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (var prop in props) { tb.Columns.Add(prop.Name, prop.PropertyType); } foreach (var item in items) { var values = new object[props.Length]; for (var i = 0; i < props.Length; i++) { values[i] = props[i].GetValue(item, null); } tb.Rows.Add(values); } return tb; }