多对多关系核心数据查询特定集合 [英] Many to many relationship core data query for specific collection

查看:82
本文介绍了多对多关系核心数据查询特定集合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

public enum Ability: String {
  case newcomer = "Newcomer"
  case beginner = "Beginner"
  case intermediate = "Intermediate"
  case advanced = "Advanced"
}

public enum Group: String {
  case solo = "Solo"
  case duo = "Duo"
  case team = "Team"
}

我想找到符合以下条件的所有演出。

I want to find all performances that match the following.

ability == "Beginner"
group == "Duo"
performers == "Jane Davies" && "Alice Evans"

文档建议不支持核心数据中的汇总操作,这令人惊讶。像这样的问题已经在此处提出,并建议使用任何。

The documentation suggests that aggregate operations in core data are not supported, which is surprising. Questions like this have been asked before here and suggest the use of 'Any'.

据我所知,任何人都会返回包括简或爱丽丝或简&爱丽丝对不对?我只想表演既包括‘简& Alice'。

To my understanding, 'Any' would return performances that include 'Jane' or 'Alice' or 'Jane & Alice' right? I just want performances that include both 'Jane & Alice'.

如何为该查询编写谓词?

How would I write a predicate for this query?

谢谢

推荐答案

使用(独特的) Performer 对象的列表,以下谓词应该起作用
查找与这些
表演者完全相关的所有 Performance 对象:

With a list of (distinct) Performer objects, the following predicate should work to find all Performance objects which are related exactly to those performers:

let perf1 = ... // Performer object for "Jane Davies"
let perf2 = ... // Performer object for "Alice Evans"
let list = [perf1, perf2]

let predicate = NSPredicate(format: "performers.@count = %ld AND ALL performers in %@", list.count, list)

但显然不是。解决方法是使用子查询:

but apparently is doesn't. The workaround is to use a SUBQUERY:

let predicate = NSPredicate(format: "performers.@count = %ld AND SUBQUERY(performers, $p, $p in %@).@count = %ld",
      list.count, list, list.count)

这篇关于多对多关系核心数据查询特定集合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆