gpt4 book ai didi

iphone - 使用 NSPredicate 对多个实体执行查找

转载 作者:行者123 更新时间:2023-12-03 21:13:31 25 4
gpt4 key购买 nike

当我将代码从 SQLite 数据库移植到 Core Data 时,我遇到了问题。

我使用的数据来自现有数据库,因此具有使用每个表(或现在我使用核心数据的实体)的 ID 定义的所有关系。我的问题是我想查询单个表,然后使用该结果向上传播数据以获取我需要的所有其他数据。

原始数据库如下所示:

CREATE TABLE TecAccessPoints (MAC varchar NOT NULL PRIMARY KEY UNIQUE,ZoneID integer NOT NULL,Floor integer);
CREATE TABLE Zones (ID integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,ZoneName varchar NOT NULL,BuildingID integer,ZoneDescription varchar);
CREATE TABLE Buildings (ID integer NOT NULL PRIMARY KEY AUTOINCREMENT,BuildingName varchar NOT NULL,CampusID integer NOT NULL,BuildingDescription varchar,Long float,Lat float);
CREATE TABLE Campuses (ID integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,CampusName varchar NOT NULL,CampusDescription text, Latitude float, Longitude float);

我原来的 SQL 查询是:

SELECT DISTINCT Zones.ID, Zones.ZoneName, Buildings.ID, Buildings.BuildingName, Campuses.ID, Campuses.CampusName, Rooms.ID, Rooms.NameNumber, Rooms.Floor 
FROM Zones, TecAccessPoints, Buildings, Campuses, Rooms
WHERE Campuses.ID = Buildings.CampusID
AND Buildings.ID = Zones.BuildingID
AND Zones.ID = Rooms.ZoneID
AND Zones.ID = TecAccessPoints.ZoneID
AND TecAccessPoints.MAC = '%@';

有什么方法可以使用 NSPredicate (或类似的东西)复制此查询,或者我必须首先执行查找

TecAccessPoints.MAC == '%@'

然后使用返回的数据对数据进行另一次查找,例如:

Zones.ID == TecAccessPoints.ZoneID

依此类推,直到我得到我需要的所有结果?

谢谢

詹姆斯

最佳答案

您无法将查询复制为核心数据谓词,因为您一次只能获取一个实体。然而,在这种情况下,将事物视为对象图而不是数据库表可能会更有成效。如果您有人际关系

TecAccessPoints <*-> Zones <*-> Buildings <-> etc.
<-*> Rooms

您可以轻松查询如上所示的 TecAccessPoints,然后遵循代码中的关系,例如

TecAccessPoint *tap;
// fetch tap

Campus *campus = tap.zone.building.campus;
NSSet *rooms = tap.zone.rooms;

假设关系被命名为zonebuildingrooms等,并且您有适当的NSManagedObject类别定义关联的@properties,以便编译器不会提示。

当然,核心数据底层正在执行一系列 SQL 查询,每个查询都是跨多个表的 JOIN。 Core Data 非常擅长将性能影响降到最低,但如果您是数据库极客,这可能会让您感到困扰。如果是这样,您将不得不坚持使用原始 SQLite。转向核心数据意味着您愿意在对象图级别考虑问题并忽略大部分实现细节。

关于iphone - 使用 NSPredicate 对多个实体执行查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1211533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com