如何在 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";
我正在尝试为每个数据表过滤一定范围内的 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";