如何使用谓词构建器来 return 满足特定搜索条件的活跃用户?

How to use predicate builder to return active users who satisfy certain search condition?

我正在使用 Predicate Builder 构建动态 EF 谓词。

我想 return 所有名字或姓氏与请求的搜索词匹配的活跃用户。这是我尝试过的方法,但我总能得到所有活跃用户...这意味着搜索没有被搜索词缩小:

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));