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))
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
AsEnumerable()
Methode zur Unterstützung von LINQ:Den link hier: http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx
GetProperties
funktioniertGetProperties
und drücken Sie F1Convert
und nur Eigenschaften hat, die Spalte?