Assuming all numeric columns are of type double, then try:
foreach(DataRow dr in table1.Rows)
{
string colName = dr["Par Name"].ToString();
if(table5.Columns.Contains(colName))
{
double lower = (double)dr["lower_limit"];
double upper = (double)dr["upper_limit"];
double min = table5.Rows.Cast<DataRow>().Min(r => r.Field<double>(colName));
if (min >= lower)
{
double max = table5.Rows.Cast<DataRow>().Max(r => r.Field<double>(colName));
if (max <= upper) table5.Columns.Remove(colName);
}
}
}
or, if they're all strings, try:
foreach(DataRow dr in table1.Rows)
{
string colName = dr["Par Name"].ToString();
if(table5.Columns.Contains(colName))
{
double lower = double.Parse(dr["lower_limit"].ToString());
double upper = double.Parse(dr["upper_limit"].ToString());
double min = table5.Rows.Cast<DataRow>().Min(r => double.Parse(r.Field<string>(colName)));
if (min >= lower)
{
double max = table5.Rows.Cast<DataRow>().Max(r => double.Parse(r.Field<string>(colName)));
if (max <= upper) table5.Columns.Remove(colName);
}
}
}