swift - 使用关系的 CoreData 谓词
问题描述
我有两个实体 -Quotes
和Customers
. 一位客户可以有多个报价。关系是quotes
和customers
。
我想根据客户姓名和电子邮件地址获取报价对象,按日期排序,但我一直在尝试格式化谓词...
func getMostRecentQuote(name: String, email: String) -> Quotes? {
var predicateList = [NSPredicate]()
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Quotes")
let predicate1 = NSPredicate(format: "name CONTAINS[c] %@", name)
let predicate2 = NSPredicate(format: "email CONTAINS[c] %@", email)
let orCompoundPredicate = NSCompoundPredicate(type: .or, subpredicates: [predicate1, predicate2])
predicateList.append(orCompoundPredicate)
fetchRequest.predicate = NSCompoundPredicate(type: .and, subpredicates: predicateList)
fetchRequest.fetchLimit = 1
解决方案
Quotes
可能您与to有一对一的关系Customers
,如果没有,请建立一个并命名该属性customer
然后使用这个单一的谓词
let predicate = NSPredicate(format: "customer.name CONTAINS[c] %@ OR customer.email CONTAINS[c] %@", name, email)
如果要过滤整个字符串不区分大小写CONTAINS
实际上是错误的运算符,最好使用LIKE
let predicate = NSPredicate(format: "customer.name LIKE[c] %@ OR customer.email LIKE[c] %@", name, email)
注意:请以单数形式命名实体,从语义上讲,您的方法将返回一个Quote,而不是一个Quotes
推荐阅读
- r - 如何从 R 中的包中提取公式或特定函数?
- c - 用C读写结构到二进制文件,然后打印结构元素
- reactjs - 使用带有样式组件的 Material UI 进行浅渲染 Jest 测试
- c++ - 我如何自定义 fprintf 以启用禁用
- flutter - VS 代码不是 Flutter 的热重载
- entity-framework-core - 数据库恢复后无法生成EFG
- javascript - Angularjs验证和突出显示ng-repeat中的输入
- http - http 登录表单是否在非公共网络上易受攻击?
- python-3.x - 从 Fire-base 实时数据库中删除单个字典(python3)
- sql - 自动化重复并集