如何连接两个字段以使用 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:@" "];
然后使用BEGINSWITH
和ENDSWITH
:
[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];
谢谢
例如,我有 @{@"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:@" "];
然后使用BEGINSWITH
和ENDSWITH
:
[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];
谢谢