C# Linq Where()函数与多个筛选器。结果错误

C# Linq Where()函数与多个筛选器。结果错误,c#,linq,linqpad,C#,Linq,Linqpad,我试图在where子句中放入multple条件,但并没有得到表示的结果 我在做什么。in(林帕德) 似乎Where条件一次只解析一个条件。因此,这两个条件都被称为或条件 好的,编辑后的问题现在清楚了 问题是您在查询中使用了条件AND&&。如果第一个操作数为false,则不计算第二个操作数,因为结果总是false,因为两个操作数的计算结果都必须为true 您要做的是检查地址和名称上的null/empty/whitespace 这就是为什么记录: new Employee() { Name="N

我试图在where子句中放入multple条件,但并没有得到表示的结果

我在做什么。in(林帕德)


似乎Where条件一次只解析一个条件。因此,这两个条件都被称为或条件

好的,编辑后的问题现在清楚了

问题是您在查询中使用了条件AND
&&
。如果第一个操作数为false,则不计算第二个操作数,因为结果总是false,因为两个操作数的计算结果都必须为
true

您要做的是检查地址和名称上的null/empty/whitespace

这就是为什么记录:

  new Employee() { Name="Name6", Address="",Desig=""},
未出现在预期输出中
Name
不是null/空的,但是
Address
是空的,因此语句返回false,并且不包括它

您的查询应该是:

var filter = query.Where(x => !string.IsNullOrWhiteSpace(x.Name)
             || !string.IsNullOrWhiteSpace(x.Address)).ToList();  
条件OR将确保如果两个操作数中的任何一个计算结果为true,则整个语句为true


如果第一个操作数为真,则第二个操作数不会被计算为“短路计算”。

得到什么结果?你的代码按照我的描述工作。我的结果包括名字1、2、3、4、5和8。(6有一个空地址,7缺少名称,因此它们被排除在外)。我假设OP将术语“null”和“empty”混为一谈,因为测试数据只包含空值(并且没有空值)。@Luaan此外,请参阅-
指示指定的字符串是null、空还是只包含空格字符。
。它是IsNullOrEmpty的扩展,包含空格检查。@DGibbs:是的,我假设“所有空格”显然包含空字符串,但你是对的,我应该更清楚:))整个误解都是因为OP提出了一个完全错误的问题——他想要一个OR,而我们则回答了如何改进他的和。我没想到他的问题是他不能正确地进行布尔逻辑:D@Luaan是的,这就是为什么它总是一个好主意,包括样本输入和输出数据,它会被发现得更快!或者我也可以使用类似query.Where(x=>!(string.IsNullOrWhiteSpace(x.Name)和&string.IsNullOrWhiteSpace(x.Address)).ToList()@JSJ将不会产生与
| |
相同的效果。仅当第一个操作数为null/空,而第二个操作数为null/空时,查询才会返回true。
| |
或将检查至少一个操作数是否为null/空。
  new Employee() { Name="Name6", Address="",Desig=""},
var filter = query.Where(x => !string.IsNullOrWhiteSpace(x.Name)
             || !string.IsNullOrWhiteSpace(x.Address)).ToList();