在下面的代码中,即使第一部分已经返回“true”,过滤器的第二部分仍在执行。||如果第一部分为真,则运算符不应执行验证的第二部分。
List<data> query = new List<data>();
query.Add(new data { name = "John", surname= "Mazi" });
query.Add(new data { name = "Joseph", surname= "Doe" });
query.Add(new data { name = "Paul", surname= "Allen" });
query.Add(new data { name = "John", surname = "Doe" });
data filters = new data { name = "John", surname = "Doe" };
List<data> data = query.Where(x => ((x.name.Trim().ToUpper() == filters.name.Trim().ToUpper()
& x.surname.Trim().ToUpper() == filters.surname.Trim().ToUpper())
||
(x.name.Trim().ToUpper().Contains(filters.name.Trim().ToUpper())
| x.surname.Trim().ToUpper().Contains(filters.surname.Trim().ToUpper())))).ToList();
在上面的示例中,它应该只返回一个项目,但它保持返回三个。
1条答案
按热度按时间pod7payv1#
你对or运算符的理解是正确的,但是你必须考虑到,你的验证将对列表中的每个条目执行。记住这一点,如果你进行验证,你会明白为什么在这个例子中会返回三个数据集。为了可读性和易用性,我将把验证分成两部分:
这将首先尝试返回每个精确匹配,如果没有,则返回包含姓名的每个数据集。