0

我有一个包含两个可选对多关系的实体(childA <<-> parent <->> childB)。这两个子实体中的每一个都包含一个我有兴趣查询的可选字符串。

使用相同的格式,我得到了我期望的结果,但不是另一个。我明白这意味着我不了解我正在使用的工具;并希望有一些见解。这是两个查询的样子:

childA.@count != 0 AND (0 == SUBQUERY(childA, $a, $a.string != NIL).@count)
childB.@count != 0 AND (0 == SUBQUERY(childB, $a, $a.string != NIL).@count)

只有当每个实体实例的字符串也为 nil 时,我才希望从 childA 和 childB 的非 nil 实例中获取结果。我的问题是,为什么要给出我期望的结果?而另一个没有?

澄清:我正在尝试解决我正在寻找两件事之一的一般问题。我要么在属性中搜索默认值。当属性是可选的时,我还在搜索 nil 属性。当仅在填充可选关系时才应考虑可选关系时,问题会更加复杂。如果没有关系计数!= 0,我会以零关系返回所有父母。在一种情况下,这是期望的行为。在另一种情况下,这似乎减少了返回的父计数(结果为 0)。

对于可选属性情况,查询可能如下所示:

parent.@count != 0 AND (parent.gender == -1) OR (parent.gender == NIL)

如果键路径中存在可选关系,则查询采用第一个示例中示例的形式。

再一次,我得到了我所期望的结果,除了一个案例,它的关系或属性特征似乎没有任何独特之处。或者我应该说,这个异常在数据模型结构或查询格式中没有什么独特之处......

4

2 回答 2

0

也许你在第二个子句中混淆了==!=它应该是

childA.@count != 0 AND (SUBQUERY(childA, $a, $a.string != NIL).@count != 0)

如果您可以先用简单的英语制定查询,那么您想要实现的目标会更清楚。

顺便说一句,您可以使用NSExpressionexpressionForSubquery:usingIteratorVariable:predicate:类为您构建子查询。那时您可能会更轻松地获得有用的错误报告。

于 2012-06-12T11:56:30.880 回答
0

我现在明白了这个问题。
就我而言,首先过滤掉计数为 0 的 NSSet 通常是合乎逻辑的。但是,在有问题的情况下,返回计数为 0 的 NSSet 和计数大于 0 的 NSSet 的结果在逻辑上是正确的,其中属性为 nil(当可选时),或者属性设置为其默认值。换句话说,在有问题的情况下,需要去除left条件,导致以下格式:

(0 == SUBQUERY(childA, $a, $a.string != NIL).@count)

看来我需要让托管对象根据具体情况指示哪种场景是合适的......哎呀!

于 2012-06-12T19:25:55.807 回答