Эти ответы уже размещены здесь. Просто чуть-чуть:
bool b = reader.GetSchemaTable().Rows
.Cast<DataRow>()
.Select(x => (string)x["ColumnName"])
.Contains(colName, StringComparer.OrdinalIgnoreCase);
//or
bool b = Enumerable.Range(0, reader.FieldCount)
.Select(reader.GetName)
.Contains(colName, StringComparer.OrdinalIgnoreCase);
Второй - чище и намного быстрее. Даже если вы не запускаете GetSchemaTable
каждый раз при первом подходе, поиск будет очень медленным.