VB.NET DataView RowFilter多条件过滤:NOT LIKE条件不生效
问题分析与解决
你的过滤规则失效的核心问题是逻辑运算符使用错误,括号里的OR会直接抵消NOT LIKE的效果。
原逻辑的问题
原语句中括号内的条件是:
CUSTOMER_ID NOT LIKE '4570*' OR CUSTOMER_ID <> '1604002' OR CUSTOMER_ID <> '3708001'
只要满足其中任意一个条件,数据就会被保留。比如某个客户ID是4570123,它虽然匹配4570*,但不等于1604002,OR条件依然成立,这条数据会被留下来,导致NOT LIKE的规则形同虚设。
修正后的过滤规则
需要把括号内的OR换成AND,确保同时满足三个排除条件:
dvShipList.RowFilter = "ASNNEED = 'Y' AND ASNFLAG <> 'Y' AND (CUSTOMER_ID NOT LIKE '4570*' AND CUSTOMER_ID <> '1604002' AND CUSTOMER_ID <> '3708001')";
或者用更简洁的写法,逻辑更直观:
dvShipList.RowFilter = "ASNNEED = 'Y' AND ASNFLAG <> 'Y' AND NOT (CUSTOMER_ID LIKE '4570*' OR CUSTOMER_ID IN ('1604002','3708001'))";
两种写法效果完全一致,都能正确排除:
- 以
4570开头的客户ID - 精确等于
1604002或3708001的客户ID
关于通配符的说明
你尝试的*和%都可以在DataView的RowFilter中作为通配符使用,这里的问题和通配符无关,完全是逻辑结构的问题。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

