如何在 DataTable 上使用 RowFilter 来查找列不为空且大于 than/less 值的行?

How to use a RowFilter on a DataTable to find rows where a column is both not null and greater than/less than a value?

我正在尝试为每个数据表过滤一定范围内的 x、y、z 坐标值。例如,我想查看 x 值大于 200 的行。我的问题是 DataTable 是从 DataGridView 中读入的,并且所有字段都被解释为字符串。此外,有几行至少缺少一个 x、y 或 z 值,因此我想排除这些值。

作为仅对 x 值的测试,我尝试了

(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = "[X Value] 
IS NOT NULL AND CONVERT([X Value], 'System.Decimal') > 200.0";

这会导致错误消息 "Input string was not in a correct format." 我认为这是因为它试图将空值转换为小数。当行过滤器不包含 [X Value] IS NOT NULL 一半时,我会遇到同样的问题。

是否可以在一个 RowFilter 中完成这一切?

不,AND 确保如果不满足第一个条件,则不评估第二个条件。所以错误不是由空值引起的,而很有可能是由空字符串引起的。

只需将测试更改为

"[x value] IS NOT NULL AND [x value] <> '' AND CONVERT([x value], 'System.Decimal') > 200.0";