核心数据:查询具有中间实体和条件的多对多关系中的不同实体
Core-data: querying distinct entities in many to many relationship with middle entity and condition
我的核心数据模型如下:
其中 code
在两个实体中都是 NSInteger
,value
也是如此。这映射了以下数据(示例数据,真实案例场景是数百行 x 数百列),其中列为 WorkCategories
、WCn
,行为 Features
、Fn
和单个单元格是 Feasibilities
:
给定一组 Features
,我需要检索其列中所有 Feasibility value
(s) 都大于 1 的所有不同 WorkCategories
。 WorkCategories
也应按升序排列 code
。所以:
- 如果我的特征集是
(F1,F3)
,结果应该是(WC3, WC4)
;
- 如果我的特征集是
(F2,F3)
,结果应该是(WC1,WC4)
;
- 如果我的特征集是
(F1,F2,F3)
,结果应该是 (WC4)
。
我通过查询核心数据中的所有 WorkCategories
然后使用它们的 feasibility
属性 通过代码过滤它们来实现它。
我的问题:有没有办法在核心数据中仅使用一个 FetchRequest
(即,executeFetchRequest:error:
输出应该已经是distinct WorkCategories
Feasibility
table 中的所有 value
(s) 都大于 1)?
WorkCategories 的这个谓词应该这样做:
predicateWithFormat:@"SUBQUERY(feasibility, $feasibility, $feasibility.value > 1 AND $feasibility.feature IN %@).@count = %lu", featuresSet, (unsigned long)[featuresSet count]
子查询获取值 > 1 的可行性和集合中的一个特征。如果找到的可能性的数量等于集合中的数量,则集合中所有可能性的值都 > 1。
我的核心数据模型如下:
其中 code
在两个实体中都是 NSInteger
,value
也是如此。这映射了以下数据(示例数据,真实案例场景是数百行 x 数百列),其中列为 WorkCategories
、WCn
,行为 Features
、Fn
和单个单元格是 Feasibilities
:
给定一组 Features
,我需要检索其列中所有 Feasibility value
(s) 都大于 1 的所有不同 WorkCategories
。 WorkCategories
也应按升序排列 code
。所以:
- 如果我的特征集是
(F1,F3)
,结果应该是(WC3, WC4)
; - 如果我的特征集是
(F2,F3)
,结果应该是(WC1,WC4)
; - 如果我的特征集是
(F1,F2,F3)
,结果应该是(WC4)
。
我通过查询核心数据中的所有 WorkCategories
然后使用它们的 feasibility
属性 通过代码过滤它们来实现它。
我的问题:有没有办法在核心数据中仅使用一个 FetchRequest
(即,executeFetchRequest:error:
输出应该已经是distinct WorkCategories
Feasibility
table 中的所有 value
(s) 都大于 1)?
WorkCategories 的这个谓词应该这样做:
predicateWithFormat:@"SUBQUERY(feasibility, $feasibility, $feasibility.value > 1 AND $feasibility.feature IN %@).@count = %lu", featuresSet, (unsigned long)[featuresSet count]
子查询获取值 > 1 的可行性和集合中的一个特征。如果找到的可能性的数量等于集合中的数量,则集合中所有可能性的值都 > 1。