CoreData 谓词使用关系
CoreData predicate using relationship
我有两个实体 - 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
到 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)
注意:请以单数形式命名实体,从语义上讲,您的方法将 return 一个 Quote,而不是一个 Quotes
我有两个实体 - 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
到 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)
注意:请以单数形式命名实体,从语义上讲,您的方法将 return 一个 Quote,而不是一个 Quotes