检查数据表列包含数值

时间:2012-01-12 13:39:05

标签: asp.net

我想只找到那些包含数值的行表单,所以我按照以下方式执行

dtDetails.Select(" (ISNUMERIC(OriginatingTransit)=0)")

但它会引发异常

The expression contains undefined function call ISNUMERIC().

1 个答案:

答案 0 :(得分:1)

您必须在数据库级别执行此操作,或者自行循环并编写一些内容以检查是否可以将值解析为数字。 Select方法不支持您尝试执行的操作:Expression property on MSDN, contains info about what's supported

bool IsNumeric(object o)
{
  decimal result_ignored;
  return o != null && 
    !(o is DBNull) && 
    decimal.TryParse(Convert.ToString(o), out result_ignored);
}

然后你可以这样做:

var filtered = dtDetails.Rows.Cast<DataRow>().
  Where(r => IsNumeric(r["OriginatingTransit"]));

如果您然后枚举filtered,则只会获得该列中包含数值的那些。

这并不完美 - 因为正如Surjit Samra在上述问题的评论中提到the answer linked to的一些评论,'数字'的确切含义是松散的。我认为,这可以通过使用decimal来尝试解析值来进行最广泛的描述。如果您的要求更严格,也可以使用其他类型(例如intfloat)或正则表达式。