Objective c 使用具有多个属性的子查询

Objective c 使用具有多个属性的子查询,objective-c,core-data,Objective C,Core Data,我有3个实体,“酒吧”、“服务员”、“产品”的关系如下,“酒吧”与“服务员”有一对多的关系,从服务员到产品的关系也是一样的 我需要知道哪些酒吧提供具有特定属性的产品 正在获取的实体是条, 到目前为止,我已经尝试: [NSPredicate predicateWithFormat:@"SUBQUERY(toWaiter, $x, ANY $x.toProduct.dateServed > %@ AND $x.toProduct.dateConsumed > %@).@count >

我有3个实体,“酒吧”、“服务员”、“产品”的关系如下,“酒吧”与“服务员”有一对多的关系,从服务员到产品的关系也是一样的

我需要知道哪些酒吧提供具有特定属性的产品

正在获取的实体是条, 到目前为止,我已经尝试:

[NSPredicate predicateWithFormat:@"SUBQUERY(toWaiter, $x, ANY $x.toProduct.dateServed > %@ AND $x.toProduct.dateConsumed > %@).@count > 0), [NSDate date], [NSDate date]];
我到哪里去了

在子查询表达式集合中仅允许一个toMany/manyToMany关系

如果我尝试:

[NSPredicate predicateWithFormat:@"SUBQUERY(toWaiter, $x, ANY $x.toProduct.dateServed > %@ ANY AND $x.toProduct.dateConsumed > %@).@count > 0), [NSDate date], [NSDate date]];
不管怎样,我都会犯同样的错误

在子查询表达式集合中仅允许一个toMany/manyToMany关系

对多个属性进行子查询的正确方法是什么

谢谢


这就是模型:

您可以通过将两个子查询子句嵌套在一起来实现这一点:

NSPredicate *filter = [NSPredicate predicateWithFormat:@"SUBQUERY(toWaiter, $x, SUBQUERY($x.toProduct, $y, $y.dateServed > %@ AND $y.dateConsumed > %@).@count > 0).@count > 0", [NSDate date], [NSDate date]];

或者,用(模糊的)自然语言:“取所有
酒吧
,计数不为零(
服务员
,计数不为零(
产品
,两者都
提供日期
消费日期
大于今天))”

为什么你的谓词中需要
toBar
关系?你说你已经为某个酒吧安排了一系列服务员。对不起,我不想,我想查询那些已经提供了这些品质产品的酒吧,我会问,你有没有可能在某处发布一个示例项目?不幸的是,用核心数据模型和东西来测试整个项目是一件痛苦的事,恐怕不是。我认为这更像是一个理论问题,不需要调试我的代码。您将如何子查询上述模型的2个属性?太好了!谢谢我想知道语法是如何通过特定的值进行过滤的。服务员工作过2次,也提供过该产品。你如何对服务员的工作时间进行建模?这是另一种多对多关系吗?不,这些是服务员对象中的属性。这本身就是一个相当复杂的查询,所以我会自己测试它,然后将它与上面的查询结合起来。假设您感兴趣的时间段是
startTime
endTime
,并且您需要
服务员(
startWork
endTime
之前)和(
endWork
startTime
之后),那么您的谓词应该是这样的:[NSPredicate predicate predicateWithFormat:@”子查询(toWaiter,$x,
$x.startWork<%@和$x.endWork>%@和子查询($x.TopProduct,$y,$y.dateServed>%@和$y.dateConsumed>%@)count>0.@count>0“,
endTime,startTime,
[NSDate date];哈哈,太好了,我得出了同样的结论,是的!