如何解决如何使用谓词构建器返回满足某些搜索条件的活动用户?
我正在使用custom serializer构建动态EF谓词。
我想返回其名字或姓氏与请求的搜索词匹配的所有活动用户。这是我尝试过的方法,但我总是会得到所有活动用户...这意味着搜索不会被搜索词缩小范围:
string searchTerm = "John"; // <-- comes from user
predicate = predicate.And(u => u.IsActive == true);
if (!string.IsNullOrEmpty(searchTerm))
{
predicate = predicate.Or(u => u.FirstName.Contains(searchTerm));
predicate = predicate.Or(u => u.LastName.Contains(searchTerm));
}
解决方法
将您的逻辑分解为一个简单的布尔表达式-
x = IsActive == true
y = FirstName match
z = LastName match
您的逻辑是x or y or z
。如果用户处于活动状态,他们将返回。
您想要x and (y or z)
。在您的if
语句中,类似-
predicate = predicate.And(u => u.FirstName.Contains(searchTerm) || u.LastName.Contains(searchTerm));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。