Konvertieren von DataTable in List <T> mithilfe von Reflections
Ich habe eine allgemeine Liste einer Klasse, mit der ich sie automatisch in DataTable konvertiereReflection
und Erweiterungsmethoden. Jetzt möchte ich es in umgekehrter Richtung tun. Ich möchte konvertierenDataTable
zu List.Better zu sagen, ich möchte helfen, eine Methode zu schreiben, die aDataTable
und einType
und findet automatisch die Eigenschaft dieses Typs (Klasse) gemäß dem Spaltennamen und weist dem Objekt dieses Typs (Klasse) einen Wert zu.
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)
Ich benutze Antwort von @ Cuong Le wie folgt:
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 der Zeile, in der ich einen Pfeil davor setze, sind zwei Fehler aufgetreten:
Keine Überladung für die Methode 'Convert' benötigt 1 Argumente
und
Die Typargumente für die Methode 'System.Data.EnumerableRowCollectionExtensions.Select (System.Data.EnumerableRowCollection, System.Func)' können nicht aus der Verwendung abgeleitet werden. Versuchen Sie, die Typargumente explizit anzugeben.
Wie kann ich dieses Problem lösen?