核心数据:匹配一对多关系中多个项目的组合
Core Data: Matching a combination of multiple items in a to-many relation
编辑:忘记提及我在之后的 Swift 代码中过滤掉了不需要的颜色的卡片。
因此,这是另一个关于 Core Data 中的对多关系以及如何为其编写谓词的问题。简而言之,我想在一对多关系中匹配多个项目的组合。
设置
- 颜色 table 有五种颜色:红、绿、白、黑、蓝
- 卡片table,每张卡片与颜色table
有一对多的关系
目标
搜索带有黑色and/or白色的卡片,意思是:
- 卡片可能 只有黑色
- 卡片可能 只有白色
- 卡片可能黑白相间
到目前为止
最好的结果是(简化):
NSPredicate(format: "ANY color == Black") // Only black cards, good
NSPredicate(format: "ANY color == White") // Only white cards, good
NSPredicate(format: "ANY color == Black OR ANY color == White") // Only black AND white cards, bad
这里有一个与 MySQL 非常相似的 post,如果它有助于进一步澄清问题:
根据 @pbasdf 的评论,我提出了以下解决方案(在实际代码中具有更好的语法):
// Desired colors
let includePredicate = NSPredicate(format: “SUBQUERY(color, $C, $C == 'Black' OR $C == 'White').@count > 0”)
// Undesired colors
let excludePredicate = NSPredicate(format: “SUBQUERY(color, $C, $C == 'Green' OR $C == 'Red' OR $C == 'Blue').@count == 0”)
// Combined to one predicate
let finalPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [includePredicate, excludePredicate]
编辑:忘记提及我在之后的 Swift 代码中过滤掉了不需要的颜色的卡片。
因此,这是另一个关于 Core Data 中的对多关系以及如何为其编写谓词的问题。简而言之,我想在一对多关系中匹配多个项目的组合。
设置
- 颜色 table 有五种颜色:红、绿、白、黑、蓝
- 卡片table,每张卡片与颜色table 有一对多的关系
目标
搜索带有黑色and/or白色的卡片,意思是:
- 卡片可能 只有黑色
- 卡片可能 只有白色
- 卡片可能黑白相间
到目前为止
最好的结果是(简化):
NSPredicate(format: "ANY color == Black") // Only black cards, good
NSPredicate(format: "ANY color == White") // Only white cards, good
NSPredicate(format: "ANY color == Black OR ANY color == White") // Only black AND white cards, bad
这里有一个与 MySQL 非常相似的 post,如果它有助于进一步澄清问题:
根据 @pbasdf 的评论,我提出了以下解决方案(在实际代码中具有更好的语法):
// Desired colors
let includePredicate = NSPredicate(format: “SUBQUERY(color, $C, $C == 'Black' OR $C == 'White').@count > 0”)
// Undesired colors
let excludePredicate = NSPredicate(format: “SUBQUERY(color, $C, $C == 'Green' OR $C == 'Red' OR $C == 'Blue').@count == 0”)
// Combined to one predicate
let finalPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [includePredicate, excludePredicate]