如何连接两个字段以使用 NSPredicate 进行搜索?

How to concatenate two fields for search with NSPredicate?

例如,我有 @{@"firstName":@"aaa", @"lastName":@"bbb"} 这样的对象。 现在我正在尝试使用下一个谓词进行搜索:

NSPredicate *predicateFirstName = [NSPredicate predicateWithFormat:@"firstName contains [c] %@", searchString];
NSPredicate *predicateLastName = [NSPredicate predicateWithFormat:@"lastName contains [c] %@", searchString];
NSPredicate *orPredicate = [NSCompoundPredicate  orPredicateWithSubpredicates:@[predicateFirstName, predicateLastName]];
searchUsersArray = [usersArray filteredArrayUsingPredicate:orPredicate];

我需要一个谓词,对于名字以 "aa" 结尾且姓氏以 @"bb"[= 开头的搜索字符串 @"aa bb" 用户,它将是 return 13=]

NSPredicate *predicateLastName = [NSPredicate predicateWithFormat:@"(firstName AND lastName contains [c] %@)", searchString]

不适合我。

使用关键字 BEGINSWITH 而不是包含。

NSPredicate *predicateFirstName = [NSPredicate predicateWithFormat:@"firstName BEGINSWITH [c] %@", searchString];
NSPredicate *predicateLastName = [NSPredicate predicateWithFormat:@"lastName BEGINSWITH [c] %@", searchString];

首先将搜索字符串分为结尾部分和开头部分:

NSArray *parts = [@"aa bb" componentsSeperatedByString:@" "];

然后使用BEGINSWITHENDSWITH:

[NSPredicate predicateWithFormat:@"(firstName ENDSWITH[c] %@) AND (lastName BEGINSWITH[c] %@", parts[0], parts[1]];

或者,您可以将计算的 属性 添加到连接名字和姓氏的实体,然后在此 属性.

中搜索

这样试试希望对你有帮助

NSString *matchString =  [NSString stringWithFormat: @"(.*aa|bb.*)",searchText];
NSString *predicateString = @"keyword MATCHES[c] %@";
NSPredicate *predicate =[NSPredicate predicateWithFormat: predicateString, matchString];

谢谢