c# - créer une table à partir d'une classe (et non une liste d'instances)

Cette question concerne les génériques et les types ainsi que des tables de données.

L'extrait de code suivant est à travers le net ici et là, et crée un datatable basé sur un type générique:

public static DataTable ListToDataTable<T>(List<T> list)
{
    DataTable dt = new DataTable();

    foreach (PropertyInfo info in typeof(T).GetProperties())
    {
        dt.Columns.Add(new DataColumn(info.Name, info.PropertyType));
    }
    foreach (T t in list)
    {
        DataRow row = dt.NewRow();
        foreach (PropertyInfo info in typeof(T).GetProperties())
        {
            row[info.Name] = info.GetValue(t, null);
        }
        dt.Rows.Add(row);
    }
    return dt;
}

Je suis l'aide de l'excellent FileHelpers de la bibliothèque d'importer des lots de notices dans SQL Server. Pour utiliser SqlBulkCopy j'ai besoin d'une table avec des colonnes d'un type donné. Filehelpers peut lire dans un .cs fichier au moment de l'exécution et de créer votre type sur cette base. par exemple:

System.Type userType = null;
userType = ClassBuilder.ClassFromSourceFile("myclassfile.cs");

J'aimerais changer la méthode ci-dessus, de sorte qu'il crée les colonnes pour moi lorsqu'il est passé d'un type (par exemple 'userType'). c'est à dire la signature de la méthode serait quelque chose comme:

public static DataTable TypeToDataTable<T>(<T> myType)

et permettrait le retour d'un dataset vide avec des colonnes, des prêts à avoir des lignes de userType ajouté.

J'ai essayé diverses méthodes - des idées?

OriginalL'auteur Glinkot | 2011-06-09