我有一个核心数据实体 OrderItem,它与另一个实体 OrderItemOption 有一对多的关系。我想找到一个与两个特定 OrderItemOptions 有关系的特定 OrderItem。我如何在核心数据中做到这一点?
OrderItemOptions 有一个 typecode 和 optioncode,本质上是一个键/值。我正在寻找一个带有选项(typecode=OptionSet1,optionCode=BT)和另一个选项(typecode=OptionSet2,optionCode=CT)的 orderItem。
问题是如何区分查询中的第一个 OrderItemOption 对象和第二个。
我能够想出一个 SQL 查询来做我想要的。它使用别名来执行表与自身的连接。我如何在 Core Data 中做同样的事情?
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';
我不认为我完全遵循谓词中“ANY”关键字背后的语义。我能够接近,
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"];
但是当逆转的选件代码倒置时,它也匹配。
我尝试在每个括号表达式之外考虑“ANY”,但这导致了解析异常。
也许一个更简单的例子也会很有趣。如果我有一个与 Books 有一对多关系的 Author 实体怎么办。我将如何创建一个谓词来表示,找到同时写了名为“Book1”的书和名为“Book2”的书的作者?