检查数据表中列中的任何行是否无法从整数转换为字符串

本文关键字:整数 转换 字符串 是否 数据表 任何行 检查 | 更新日期: 2023-09-27 18:33:14

我有一个数据表,它将分数保存在一列中。问题是分数可以是整数或字符串,例如 15(整数分数(或"高级"(字符串分数(。我不知道该列将包含哪种类型的分数,但我想在检查列行中的任何分数是否包含无法转换为整数的字符串后做出决定。我正在使用两个数据表,一个具有未知分数(dt(,另一个将在我执行某些操作后填充所有数据和分数(dtCloned(。我想在通过以下检查复制所有分数之前转换 dtCloned 中分数列的数据类型: 我想做的是,如果我有包含这些分数的列:

ScoreValue Column
Advanced
Basic
Proficient
Below Basic

如果此列中的任何分数无法转换为整数(在这种情况下没有可以(,那么我不想将该列转换为整数数据类型,否则我会这样做。更多示例:

Scorevalue column
1
2
3
4

这将通过测试,因为所有值都可以转换为整数。它将继续并将列转换为整数数据类型。

ScoreValue column
0
Advanced
Proficient

这不会传递,因为有些字符串值无法转换为整数。这就是我到目前为止所拥有的,只是检查第 10 行第 13 列中的分数(第 10 行没有理由只是不知道更好的方法来做到这一点,而第 13 列是分数列(是否可以转换为整数。

int number;
bool tryConvert = Int32.TryParse(Convert.ToString(dt.Rows[10][13]), out number);
if (tryConvert)
    dtCloned.Columns[13].DataType = typeof(Int32);
foreach (DataRow row in dt.Rows)
{
    dtCloned.ImportRow(row);
}

那么,有什么方法让我不必硬编码特定的行号进行检查。理想情况下,如果列中的任何行具有无法转换为整数的字符串值,请不要将列数据类型转换为整数。我知道 LINQ 有一个方法"Any"。在这种情况下行得通吗?

检查数据表中列中的任何行是否无法从整数转换为字符串

在您的情况下,All将成为您的朋友,如下所示:

int number;
if(dt.Rows.Cast<DataRow>().All(x => int.TryParse(Convert.ToString(x[13]), out number)))
    dtCloned.Columns[13].DataType = typeof(Int32);

希望这有帮助...