Как преобразовать DataTable в список <T> с помощью отражений

У меня есть общий список класса, который я автоматически конвертирую в DataTable, используяReflection и методы расширения. Теперь я хочу сделать это в обратном направлении. Я хочу преобразоватьDataTable в List.Better, чтобы сказать, что я хочу помочь написать метод, который ожидаетDataTable иType и автоматически найти свойство этого типа (класса) в соответствии с именем столбца и присвоить значение объекту этого типа (класса). Как этот код psodu:

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
        }
    }
}

Как я могу это сделать?

Edit 1)

Я использую ответ @Cuong Le следующим образом:

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

а также :

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;
} 

но в строке я помещаю стрелку перед ним, я получил эти две ошибки:

No overload for method 'Convert' takes 1 arguments

а также

The type arguments for method 'System.Data.EnumerableRowCollectionExtensions.Select(System.Data.EnumerableRowCollection, System.Func)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

Как я могу решить эту проблему?

Ответы на вопрос(1)

Ваш ответ на вопрос