【问题标题】:Creating Core Data predicate to get data within one-to-many relationship创建核心数据谓词以在一对多关系中获取数据
【发布时间】:2012-05-28 07:19:48
【问题描述】:

我有一个 Loans 实体,其 returnedDate 属性可以包含日期或为 NIL。与另一个实体 Items 存在一对多关系,因此项目可以与许多 Loans 相关联。我想创建一个谓词,我可以在其中找到当前没有loans.returnedDate==NIL 的所有项目。

假设我目前有以下:

Loan1-item1,returnedDate=NIL
Loan2-item1,returnedDate=5/4/2012
Loan3-item2,returnedDate=NIL.

我想要一个不返回任何项目的谓词。

NSPredicate *pred = [NSPredicate predicateWithFormat:@"!(ANY loaned.returnDate==nil)"];

返回 item1。

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(NONE loaned.returnDate==nil)"];

返回 item1。

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(ANY loaned.returnDate!=nil)"];

返回 item1。

谁能告诉我什么逻辑会返回适当的结果?

【问题讨论】:

  • 抱歉,我不明白你的目标?如果您使用该测试用例查询没有returnDate nil 的对象,您将始终获得一个元素。为什么需要返回 0 个元素?谢谢。
  • 抱歉,我应该说明我的目标以明确这一点 - 我想查找当前未借出的项目列表!(returnDate==nil)。我认为问题在于,如果一个项目过去曾被退回,就像上面示例中的 item1 一样,它会被退回。

标签: core-data nspredicate one-to-many


【解决方案1】:

所以我使用了以下谓词:

(SUBQUERY(loaned, $sub, $sub.returnDate==nil).@count == 0)

它正在返回所需的结果。如果你能说服我不要使用 SUBQUERY,请告诉我怎么做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多