我有一个核心数据实体OrderItem,它与另一个实体OrderItemOption具有多对多关系。我想查找与两个特定OrderItemOptions有关系的特定OrderItem。我如何在Core Data中做到这一点?检索具有与两个子对象的特定关系的核心数据对象
OrderItemOptions有一个typecode和optioncode,实质上是一个键/值。我正在寻找一个带有选项(typecode = OptionSet1,optionCode = BT)的orderItem和另一个选项(typecode = OptionSet2,optionCode = CT)。
问题是如何区分第一个OrderItemOption对象和查询中的第二个。
我能够想出一个SQL查询来完成我想要的功能。它使用别名来执行表与自身的连接。我如何做核心数据的等价物?
的SQL语句是:
select * from zorderItem, zorderItemOption one, zorderItemOption two where
one.zorderitem = zorderItem.z_pk and
one.zoptiontypecode='OptionSet1' and one.zoptioncode='BT' and
two.zorderitem =zorderitem.z_pk and
two.zoptiontypecode='OptionSet2' and two.zoptioncode='CT';
我不觉得我挺按照语义谓词的“任意”关键字后面。我能够接近,
NSPredicate *pre = [NSPredicate predicateWithFormat:
@"order == %@ and
(any options.optionTypeCode == %@ and any options.optionCode == %@)
and
(any options.optionTypeCode == %@ and any options.optionCode == %@)",
order, @"OptionSet1", @"BT", @"OptionSet2", @"CT"];
但它也匹配时,optionCodes在哪里颠倒。
我试着在每个括号表达式之外考虑'ANY',但是这导致了一个解析异常。
也许一个简单的例子也会很有趣。如果我有一个与图书有多对多关系的作者实体,该怎么办?我如何创建一个谓词来说明,找到写了“Book1”这本书和“Book2”这本书的作者?