Если вы хотите это во время выполнения, вы не можете использовать дженерики. Вы можете переписать свой метод так:
public void GetMinMaxRangeTest(DataTable data, string valueColumnName)
{
DataColumn column = data.Columns[valueColumnName];
var min = data.AsEnumerable().Min(m => Convert.ChangeType(m[valueColumnName], column.DataType));
var max = data.AsEnumerable().Max(m => Convert.ChangeType(m[valueColumnName], column.DataType));
}
Я проверил это в списке, например:
List<string> num = new List<string>() {
"1", "2", "3", "-1", "11", "10", "100"
};
var min = num.AsEnumerable().Min(m => Convert.ChangeType(m, typeof(int)));
и это дает правильный результат: -1.