2013-08-05 2 views
0

Я пытаюсь заставить предикат подзапроса работать, и я боюсь.Предикат подзапроса основных данных

У меня есть две сущности.

[Лига] < ---- >> [Игра]

Игра имеет свойство kickOffDate.

Я бы хотел использовать предикат, чтобы вернуть все Leagues, у которых есть хотя бы один Game с kickOffDate сегодня.

Я использую этот предикат ...

// startOfDay and endOfDay are functions to return the given date with 00:00:00 and 23:59:59 respectively 
NSPredicate *startOfDayPredicate = [NSPredicate predicateWithFormat:@"SUBQUERY(games, $g, $g.kickOffDate >= %@)[email protected] > 0", [self startOfDay:[NSDate date]]]; 
NSPredicate *endOfDayPredicate = [NSPredicate predicateWithFormat:@"SUBQUERY(games, $g, $g.kickOffDate <= %@)[email protected] > 0", [self endOfDay:[NSDate date]]]; 

NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[startOfDayPredicate, endOfDayPredicate]]; 

Однако, когда я использую это не похоже, чтобы получить какие-либо результаты.

Правильно ли я написал предикат?

Есть ли лучший способ сделать это?

ответ

5

Вы пробовали (непроверенные):

[NSPredicate predicateWithFormat:@"SUBQUERY(games, $g, $g.kickOffDate >= %@ AND $g.kickOffDate <= %@)[email protected] > 0", [self startOfDay:[NSDate date]],[self endOfDay:[NSDate date]]]; 

== Лиги, что есть игра с кик-офф даты в заданном диапазоне

Ваше решение эквивалентно:

[NSPredicate predicateWithFormat:@"ANY games.kickOffDate >= %@ AND ANY games.kickOffDate <= %@",start,end]; 

== Лига, у которой есть игра, начинающаяся после заданной даты, и игра, начинающаяся до заданной даты (могут быть разные игры или одна и та же игра)

который должен возвращать больше результатов, чем вам нравится.

Edit:
Как предложил @Martin R, вы должны убедиться, что данные действительно включают в себя League ответа на предикат, чтобы проверить его.
Если вы все еще не получили никаких результатов, проверьте, были ли ошибки во время выполнения запроса, и ваш стек данных правильно инициализирован.

+0

Да, это выглядит правильно. Единственное, о чем я думаю, это то, что OP не получает никаких результатов со своим предикатом - он должен давать слишком много результатов. –

+0

Лучше ли использовать SubQuery вместо Compound Predicate? Какой из них следует использовать в какое время? – Satyam

Смежные вопросы