2014-03-06 106 views
0

我有一个DataTable,其中有一个名为'UID'的字符串类型的列。检查所有字符串值是否是DataTable字符串列中的整数

验证每个值是否为此列中的整数的最佳方法是什么?

一种方法是循环通过每个行,如下代码(dt变量,是填充数据表对象),然后检查在try catch块使用integer.Parse UID列中的值,也可以是有一个更容易使用基于LINQ的方法。

if(dt!=null) 
{   
      try 
       { 
        foreach (DataRow row in dt.Rows) 
        { 
         int.Parse(row["UID"].ToString()); 
        } 
       } 
       catch (Exception ex) 
       { 
        throw; 
       } 
    } 

回答

1

您应该使用int.TryParse相反,你可以使用Enumerable.All缩短代码:

int i; 
bool allInts = table.AsEnumerable() 
    .All(r => int.TryParse(r.Field<string>("UID"), out i)); 
+0

这将如何抛出一个异常,让我知道一个值不是一个整数?对我来说,重要的是要知道一个无效值,它不是一个整数。 – Sunil

+0

@Sunil:对不起,我编辑了我的答案,添加了'Enumerable.All'类型的返回值。它是一个'bool',它表示是否所有的字段不能被解析为'int'。 –

+0

好的。谢谢。我会尝试你的代码。 – Sunil

0

试试这个

var table = YourTable; 
int invalidDataCount = table.AsEnumerable().Where(d => d.Field<string>("UID").Contains('-')).Count(); 
if (invalidDataCount > 0) { 
    throw new Exception(); 
} 
+0

为什么你要计算字段“UID”包含连字符的行? –

+0

我想他只是想检查是否有非整数? – francorobles

+0

是的,但还有其他字符串不能被解析为不包含连字符的“int”,例如“ABC”。 –

相关问题