如何解决如何使用Swift快速过滤子列表对象?
我创建了两个Realm Object
。我想过滤子列表对象,但无法过滤。
我的第一个对象如下
class OrgDetails: Object,Codable {
@objc dynamic var orgId: Int = 0
//some other property
let orgMembers = List<OrgMembers>()
@objc dynamic var isRemoved: Bool = false
//other code
}
我的第二个对象
class OrgMembers: Object,Codable {
@objc dynamic var orgId: Int = 0
@objc dynamic var orgMemberId: Int = 0
@objc dynamic var isDeleted: Bool = false
//other property and code
}
在这里我尝试下面的查询来过滤结果集。我只想选择未删除的 orgMembers及其orgDetails。
let orgs = RealmManager.shared.read(condition: "isRemoved = false",object: OrgDetails.self)?.filter("orgMembers.isDeleted = false")
我也尝试过
self.corporates = RealmManager.shared.read(condition: "isRemoved == false and orgMembers.isDeleted == false",object: OrgDetails.self)?.toArray(type: OrgDetails.self)
但是两个查询都给出了错误
'Invalid predicate',reason: 'Key paths that include an array property must use aggregate operations'
如何使用过滤器获取记录?还有其他方法可以达到上述效果吗?
解决方法
如果我正确理解了您的问题,则您正在尝试: 1-过滤将isRemove设置为false的OrgDetails 2-对于在1 /中获得的数组的每个元素,您想过滤掉组织成员,只保留那些未被删除的成员。
这是我要怎么做:
var orgs = RealmManager.shared.read(condition: "isRemoved = false",object: OrgDetails.self)
orgs.forEach {
$0.orgMembers = Array($0.orgMembers.filter({ !$0.isDeleted }))
}
,
您的问题不清楚。
如果您想要一个未删除的组织且删除的成员为零的组织列表,这将为您提供想要的:
let orgs = RealmManager.shared.read(condition: "isRemoved == false",object: OrgDetails.self)?
.filter("SUBQUERY(orgMembers,$orgMember,$orgMember.isDeleted == true).@count == 0")
如果您想要一个尚未删除的组织列表,省略其已删除的成员,则无法通过查询来做到这一点。我的建议是用两个列表定义您的OrgDetails模型。一个列表的成员尚未删除,另一列表的成员已删除。
class OrgDetails: Object,Codable {
@objc dynamic var orgId: Int = 0
let orgMembers = List<OrgMembers>()
let orgMembersDeleted = List<OrgMembers>()
@objc dynamic var isRemoved: Bool = false
}
,
让我重申一下这个问题:
基于问题中的两个Realm对象,您想返回所有 OrsDetails其中isRemoved = false并且列表中的任何orgMembers都有 一个isRemoved属性= false。
换句话说,如果main属性上的isRemoved为false,并且列表中的任何orgMember都具有isRemoved = false。
如果这是问题,那么答案是一个问题
let result = realm.objects(OrgDetails.self).filter("isRemoved == false AND (ANY orgMembers.isDeleted == false)")
这将返回所有isRemoved为false且其List属性中的任何OrgMembers具有isDeleted = false的OrgDetails对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。