Convertir List a DataTable

public DataTable ConvertToDataTable<T>(IList<T> data)
    {
        PropertyDescriptorCollection properties =
           TypeDescriptor.GetProperties(typeof(T));
        DataTable table = new DataTable();
        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)
                row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
            table.Rows.Add(row);
        }
        return table;

    }

Copiar un DataTable…

Para copiar un DataTable con todos sus datos se requiere lo siguiente.

DataTable nuevo = new DataTable();
nuevo = original.Clone();
foreach (DataRow row in original.Rows)
{
     nuevo.Rows.Add(row.ItemArray);
}

Lo dejo como post, ya que después se me olvida 😛