Wie Konvertiert DataTable List<T> mit Reflexionen

Habe ich eine Generische Liste von einer Klasse, die ich automatisch konvertieren Sie es in DataTable mit Reflection und Erweiterung der Methoden.Jetzt möchte ich es in umgekehrter Richtung.Ich möchte konvertieren DataTable Liste.Besser zu sagen ich will helfen, schreiben Sie eine Methode, die erwarten, dass ein DataTable und ein Type und automatisch finden, die-Eigenschaft des Typs(Klasse) nach der Spalte name und Wert zuweisen zu Objekt dieses Typs(Klasse).wie diese psodu code:

private List<T> ConvertToList<T>(DataTable dt)
{
    List<string> AllColumns = //Get All Column Names of a DataTable
    for(int i=0;i<dt.Rows.Count;i++)
    {
        foreach(var item in AllColumns )
        {
             //Get Property According To **ITEM**
             //Get Data Of Rows[i][item] and assign it to T.property
        }
    }
}

Wie kann ich das machen?


Bearbeiten 1)

Benutze ich Antwort von @Cuong Le wie diese:

var properties = typeof(CustomType).GetProperties().ToList();
List<CustomType> list = ConvertToList<CustomType>(dt, properties);

und :

private List<T> ConvertToList<T>(DataTable dt,List<PropertyInfo> fields) where T : class
{
    return dt.AsEnumerable().Select(Convert<T>(fields)).ToList();  <------
}

private T Convert<T>(DataRow row,List<PropertyInfo> fields) where T : class
{
    var properties = typeof(T).GetProperties().ToList();

    var objT = Activator.CreateInstance<T>();
    foreach (var pro in properties)
    {
        pro.SetValue(objT, row[pro.Name],null);
    }

    return objT;
} 

aber in Zeile lege ich einen Pfeil davor habe ich diese zwei Fehler:

Keine überladung für die Methode 'Wandeln' nimmt 1 Argumente

und

Den Typ der Argumente für die Methode 'System.Daten.EnumerableRowCollectionExtensions.Wählen Sie(System.Daten.EnumerableRowCollection, System.Func)' kann nicht abgeleitet werden aus der Nutzung. Versuchen Sie, den Typ der Argumente explizit.

Wie kann ich dieses problem lösen?

  • Wenn Sie mehr input param, es sollte sein: Select(row => Convert<T>(row, fields))
InformationsquelleAutor Arian | 2012-09-30
Schreibe einen Kommentar