2012-05-10 53 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 

作謂語。雖然我不確定你爲什麼在命令中使用了==%@子句,但我只是將它保留在子查詢的版本中以保持一致性...

相關問題