Re: Core Data request predicates and to-many relationships
Re: Core Data request predicates and to-many relationships
- Subject: Re: Core Data request predicates and to-many relationships
- From: "Melissa J. Turner" <email@hidden>
- Date: Mon, 8 Dec 2008 14:07:24 -0800
On Dec 6, 2008, at 01:45, Luke Evans wrote:
If there are any NSPredicate gurus out there, I'm scratching my head
on this one:
I have an entity that can optionally have a set of attributes (name-
value pairs). This is set up in the model as a optional to-many
relationship to an attribute entity.
Now, I want to fetch the list of managed objects of this entity
whose attributes exactly match a dictionary that is passed. The
predicate for this needs to filter the objects that have all the
required attributes; matching both the name, and value for each
attribute.
At this point I'm not seeing how you can code this in a predicate.
If I AND some clauses like:
...ANY attr.name == %@ AND ANY attr.value == %@...
for each attribute I'm testing for, then AFAICS I'm not testing that
the _same_ attr has the name and value.
I wondered about:
...ANY (attr.name == %@ AND attr.value == %@)...
but this doesn't appear to be legal syntax.
I'm still experimenting, but if anyone knows how to express a query
that allows multiple clauses on the _same_ entity across a to-many
relationship I'd appreciate a clue!
Cheers
Luke
If you're targetting 10.5 or later, there's a subquery expression in
the predicates that was added to support this kind of query. The
syntax for what you're doing would be:
SUBQUERY(toMany, $each, $each.name == %@ AND $each.value = %@).@count
> 0
Note that this is on the list of expensive predicate operations, so it
should be towards the end of a compound predicate.
Cheers,
+Melissa
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden