我想只找到那些包含数值的行表单,所以我按照以下方式执行
dtDetails.Select(" (ISNUMERIC(OriginatingTransit)=0)")
但它会引发异常
The expression contains undefined function call ISNUMERIC().
答案 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
来尝试解析值来进行最广泛的描述。如果您的要求更严格,也可以使用其他类型(例如int
或float
)或正则表达式。