public static DataTable ListToDataTable<T>(IList<T> list)
{
DataTable table = new DataTable();
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
for (int i = 0; i < properties.Count; i++)
{
table.Columns.Add(properties[i].Name, Nullable.GetUnderlyingType(properties[i].PropertyType) ?? properties[i].PropertyType);
}
object[] values = new object[properties.Count];
foreach (T item in list)
{
for (int i = 0; i < values.Length; i++)
{
values[i] = properties[i].GetValue(item) ?? DBNull.Value;
}
table.Rows.Add(values);
}
return table;
}