NSPredicate, который ссылается на несколько полей в отношении ко многим? - PullRequest
6 голосов
/ 08 сентября 2010

Я использую постоянное хранилище SQLite. У меня NSManagedObject класс Den с отношением ко многим Bear. Bear имеет несколько полей:

Bear:
    breed
    color
    age
    ...

Когда я создаю запросы на выборку для своих Den объектов, я могу фильтровать объекты, имеющие связанный Bear с определенным значением поля:

NSPredicate *hasGrizzlyPred = [NSPredicate predicateWithFormat:@"ANY Bear.breed == 'grizzly'"];

Или я так же легко могу найти Den, у которого есть бурый медведь:

NSPredicate *hasBrownBearPred = [NSPredicate predicateWithFormat:@"ANY Bear.color == 'brown'"];

Но есть ли способ найти Den с медведем коричневого цвета и гризли? Следующее законно, но, я думаю, неверно:

// Not quite right: search for a den with a brown bear AND a grizzly
NSPredicate *hasBrownAndGrizzlyPred = [NSPredicate predicateWithFormat:@"ANY Bear.color == 'brown' AND ANY Bear.breed == 'grizzly'"];

1 Ответ

6 голосов
/ 08 сентября 2010

Вы можете сделать это с помощью выражения предиката SUBQUERY. В случае запроса к логову с медведем (где Den имеет отношение ко-многим к Bear с именем bears), это коричневое и гризли:

[NSPredicate predicateWithFormat:@"SUBQUERY(bears, $b, $b.color=='brown' AND $b.breed=='grizzly').@count > 0"];

...