bindingSource.Filter - 何时使用 AND 与 OR

问题描述

我正在学习使用 bindingSource.Filter 并且在过去的几天里一直让我发疯。

我有 7 列,我正在尝试按照“如果该行已检查多个 ListCheckBox 中的值,则调整行以显示符合条件的行”的方式创建过滤器。基本上就像excel一样。

这是一个例子: First Name | Last Name | EmployeeID| Department //

第一行示例 = John | Doe | 001 | IT

第二行示例 = Jane | Doe | 002 | HR

第三行示例 = Bob | Doe | 003 | Logistics

第四行示例 = Sally | Doe | 004 | Logistics

当然,这只是一个例子,但如何过滤超过 3 列? 我发现在 2 个相同的列或 2 个不同的列之间使用 OR 是有效的。

过滤一列:

例如:[First Name] = 'John' OR [First Name] = 'Jane'

过滤 2 列: [First Name] = 'John' OR [First Name] = 'Jane' AND [Department] = 'IT'

用 3 列过滤: [First Name] = 'John' AND [FirstName] = 'Jane' OR [Last Name] = 'Doe' AND [Department] = 'HR'

最后一个过滤器有效,但我不清楚何时使用 AND 以及何时使用 OR。

我认为在任何地方使用 AND 都可以解决问题,但事实并非如此。我的数据表最终只显示了 0 个结果。

我已经搜索了一篇文章或任何可以解释过滤逻辑的内容,但我找到的最接近的是 this article for Row Filter,这可能或多或少是同一件事?

感谢任何帮助或指导。

另外,如果有人知道除了使用 bindingsource.Filter 之外的更好的方法来对数据表进行多重过滤。不要害羞。

解决方法

我不清楚什么时候用AND,什么时候用OR

问题可能源于你的说话方式。我怀疑您可能会说“我想要所有蓝色汽车和所有红色卡车”-实际上是计算机术语。如果你说“对于列表中的每个项目,我只想看看它是蓝色汽车还是红色卡车”,那就更清楚了,只是人类倾向于不那样说话 - 他们说“和”当他们的意思是“或”:

(type = 'car' AND color = 'blue) OR (type = 'truck' AND color = 'red')
  • AND 必须在一行中
  • OR 必须在不同的行以及在一行内
Name = 'John' AND Name = 'Mary'

这个没意义。没有人的名字同时是约翰和玛丽。他们的名字叫约翰,或者他们的名字叫玛丽

记住 AND 在一行内起作用

John Smith
Mary Jones

firstname = 'john' AND lastname = 'jones;'

没有单行与此匹配 - 并且在该行内工作。没有行的名字是 john,姓氏是 jones

firstname = 'john' OR lastname = 'jones'

两行都返回 - 第一行,因为名字是 john。第二行,因为姓氏是琼斯。 OR 可以跨行工作,也可以在行内工作。或者可以应付你重复同样的事情:

firstname = 'john' OR firstname = 'mary'

所有这些事情都变成了一个真实的陈述,每行评估一次。对于约翰史密斯行:

firstname = 'john'    --> it's true
OR 
firstname = 'mary'    --> it's false
  • true or truetrue
  • true and truetrue
  • true or falsetrue
  • true and falsefalse
  • false or falsefalse
  • false and falsefalse

使用括号对逻辑组合进行分组

这个不清楚:

firstname = 'john' and lastname = 'smith' OR firstname = 'mary' and lastname = 'jones'

它是这样的:

(firstname = 'john' and lastname = 'smith') OR (firstname = 'mary' and lastname = 'jones')

没有其他意义

firstname = 'john' and (lastname = 'smith' OR firstname = 'mary') and lastname = 'jones'
(firstname = 'john' and lastname = 'smith' OR firstname = 'mary') and lastname = 'jones'
firstname = 'john' and (lastname = 'smith' OR firstname = 'mary' and lastname = 'jones')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...