Use a non-generic method to convert the
DataTable
:
public static List<object> ConvertTableToList(this DataTable table, Type itemType)
{
List<object> result = new List<object>();
foreach (var row in table.AsEnumerable())
{
object item = Activator.CreateInstance(itemType);
foreach (var prop in itemType.GetProperties())
{
prop.SetValue(item, Convert.ChangeType(row[prop.Name], prop.PropertyType), null);
}
result.Add(item);
}
return result;
}
Usage:
Type itemType = GetItemTypeFromTableName(TableNameSelected);
List<object> TableDetailsInList = ConverterClass.ConvertTableToList(TableDetails, itemType);
Now you just need to work out how to map from the table name to the item type. For example:
private static readonly IReadOnlyDictionary<string, Type> ItemTypeMap = new Dictionary<string, Type>
{
["CSBM_AGE_BAND"] = typeof(CSBM_AGE_BAND),
...
};
private static Type GetItemTypeFromTableName(string tableName) => ItemTypeMap[tableName];