2012-05-10 81 views
0

我有一个核心数据实体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”这本书的作者?

回答

0

有人回答了有关苹果开发者论坛,https://devforums.apple.com/message/659752#659752

重复张贴在这里,

这听起来像你正在寻找的是一个子查询。一个子查询的解释:http://funwithobjc.tumblr.com/post/2726166818/what-the-heck-is-subquery

我认为这会是这样的

order == %@ AND 
subquery(orderItemOptions, $one, $one.typeCode = %@ && $one.optionCode = %@)[email protected] >0 AND 
subquery(orderItemOptions, $two, $two.typeCode = %@ && $two.optionCode = %@)[email protected] >0 

作谓语。虽然我不确定你为什么在命令中使用了==%@子句,但我只是将它保留在子查询的版本中以保持一致性...

相关问题