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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage