NSPredicate это эквивалент SQL как LIKE - PullRequest
48 голосов
/ 30 апреля 2010

Я ищу способ использования NSPredicate для установки условия LIKE для выборки объектов. В дополнение к этому, OR также будет полезно. Я пытаюсь сделать что-то, где, если пользователь ищет «Джеймс», я могу написать NSPredicate, что будет эквивалентно:

select * from users where firstname LIKE '%James%' OR lastname LIKE '%James%';

Ответы [ 3 ]

118 голосов
/ 30 апреля 2010
NSString *_mySearchKey = @"James";
NSPredicate *_myPredicate = [NSPredicate predicateWithFormat:@"(firstname CONTAINS[cd] %@) OR (lastname CONTAINS[cd] %@)", _mySearchKey, _mySearchKey];
37 голосов
/ 30 апреля 2010

Оператор CONTAINS, безусловно, будет работать просто отлично. Если вы ищете более прямую корреляцию, вы также можете использовать оператор LIKE (* = 0 или более символов, ? = 1 символ):

NSString *_mySearchKey = @"James";
NSPredicate *_myPredicate = [NSPredicate predicateWithFormat:@"firstname LIKE '*%1$@*' OR lastname LIKE '*%1$@*'", _mySearchKey];

Для справки:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html#//apple_ref/doc/uid/TP40001795-215868

10 голосов
/ 11 ноября 2011

Другая возможность

@"firstname beginswith[c] James"

Как хорошая альтернатива содержит

Иногда содержит не всегда правильный ответ

...