如何在核心数据中执行复杂的提取请求

时间:2018-06-27 06:25:03

标签: swift sqlite core-data nspredicate nsfetchrequest

我已实现Core数据以存储在我的App中。我需要使用FetchRequest和谓词执行复杂的访存,如下面的SQLite查询:

my_array.min(axis=0)

在这里,diagnostic_drug&drug是实体,其他是属性。

public Country findCountry(String countryname) {
        Country foundCountry = null;
        for (int i = 0; i < catalogue.length; i++) {
            if (catalogue[i].getName().equals(countryname)) {
              foundCountry = catalogue[i];
              break;
            }
        }
        return foundCountry;
    }

Drug的“ id”属性等于Diagnosis_drug的“ drugId”属性。该查询是从Diagnosis_drug获取得分最高的药物,并与Drug实体进行内部联接以获取其详细信息。

1 个答案:

答案 0 :(得分:0)

因此,我发现核心数据几乎没有限制。仅当两个不同的实体之间具有关联时,才可以对它们执行提取请求。即如果您在Person(entity_1)和他的手机(entity_2)之间具有一对一的关系,则要获取两者,我们需要对Person实体执行获取。要在Person上设置过滤器,我们将根据需要添加一个谓词,并在mobile上设置过滤器,我们将在同一谓词中的mobile属性上放置一个“ SUBQUERY”。如果两个实体没有关系,则可以解决。您将这两个实体作为新的Parent实体的子实体,并在新的Parent实体(See Reference!上执行访存)。但这仍然给我们留下了两个实体已经有其他父母的情况!这里没有关系,也没有共同的父实体。因此,这是核心数据的局限性。您需要分别对这两个实体执行提取。另外,核心数据提取不允许在查询谓词中进行计算(您需要在实体中维护一个额外的变量,并根据需要每次进行更新)。欢迎对我的发现进行任何更正。谢谢。