2014-12-04 25 views
1

我有一个DataTable,其中包含一列中的分数。问题是分数可以是整数或字符串,例如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有一个方法“任何”。这会在这种情况下工作吗?

回答

3

在你的情况,All将成为你的朋友,像:

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

希望这有助于...

+0

这似乎是一个真正有效的解决方案。非常感谢。以前从未见过,绝对总是LINQ学到的新东西。再次感谢。 – frontin 2014-12-04 07:59:41

相关问题