【问题标题】:Check if all string values are integers in a DataTable string column检查 DataTable 字符串列中的所有字符串值是否都是整数
【发布时间】:2014-04-09 21:28:16
【问题描述】:

我有一个 DataTable,其中有一列名为“UID”的字符串类型。

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

一种方法是循环遍历每一行,如下面的代码(dt 变量是填充的 DataTable 对象),然后在 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;
                }
  }

【问题讨论】:

    标签: datatable ado.net validation


    【解决方案1】:

    你应该改用int.TryParse,你可以用Enumerable.All来缩短代码:

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

    【讨论】:

    • 这将如何引发异常或让我知道值不是整数?重要的是要知道存在一个无效值,它不是整数。
    • @Sunil:对不起,我已经编辑了我的答案以添加类型 Enumerable.All 返回。它是一个bool,表示是否不是所有字段都可以解析为int
    【解决方案2】:

    试试这个

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

    【讨论】:

    • 你为什么要计算字段UID包含连字符的行?
    • 我想他只是想检查是否有非整数?
    • 是的,但还有其他字符串无法解析为不包含连字符的int,例如"ABC"
    • 从外观上看,数据都是我猜的UID。
    猜你喜欢
    • 1970-01-01
    • 2014-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2013-01-09
    • 2018-02-09
    相关资源
    最近更新 更多