我有一個核心數據實體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」這本書的作者?