问题描述
我正在使用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));