我想找到只包含数字值的那些行形式的表,所以我做了如下检查数据表中列包含数值
dtDetails.Select(" (ISNUMERIC(OriginatingTransit)=0)")
但它抛出异常
The expression contains undefined function call ISNUMERIC().
我想找到只包含数字值的那些行形式的表,所以我做了如下检查数据表中列包含数值
dtDetails.Select(" (ISNUMERIC(OriginatingTransit)=0)")
但它抛出异常
The expression contains undefined function call ISNUMERIC().
你”必须在数据库级别执行该操作,或者循环遍历自己并编写一些内容来检查值是否可以被解析为数字。 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
)或正则表达式。
我只想检查整数只可能这将工作,如果我cheng int.parse – 2012-01-12 14:01:05
@PranayRana是啊'int.TryParse'也会工作 – 2012-01-12 14:01:58
完成谢谢............. ..求助 – 2012-01-12 14:14:55
hmmm可能是这样的dtDetails.Select(“ISNUMERIC(OriginatingTransit)= 0”) – 2012-01-12 13:42:20
是一个'System.Data.EvaluateException'异常吗?如果是这样,请参阅http://social.msdn.microsoft.com/Forums/is/adodotnetdataset/thread/d61ba2f5-c999-4fc1-aee0-e61415f439b8 – 2012-01-12 13:47:07
“ISNUMERIC”几乎总是使用错误的函数 - 它回答了一个问题:我从来没有发现任何人想问(“这个文本是否可以转换成至少一种数字数据类型?”),而不是大多数人常见的问题(“该文本可以转换为X?”,其中X是*特定的*数据类型)。例如,'1d2'是'ISNUMERIC'定义的数字,就像'''一样。 – 2012-01-12 13:50:26