基于SQL IN()函数创建用于Core Data的NSPredicate

5
我有一个场景,必须从Core Data中基于给定列的多个值获取多个记录。这种目的的常见SQL查询是:
SELECT * FROM suppliers 
WHERE supplier_name in ('IBM', 'Hewlett Packard', 'Microsoft');

我还没有想出如何使用本地的IN()函数来实现这个目的。

我现在创建的NSPredicate方式似乎有些多余,具体如下。

NSMutableArray *predicateArray = [NSMutableArray array];
[skus enumerateObjectsUsingBlock:^(NSString *sku, NSUInteger idx, BOOL *stop) {
    [predicateArray addObject:
        [NSString stringWithFormat:@"(AudioSKU == \"%@\")", sku]];
}];

NSString *predicateString = [predicateArray 
                                  componentsJoinedByString:@" OR "];
NSPredicate *predicate = [NSPredicate 
                                  predicateWithFormat:predicateString];

如何正确使用NSPredicate或NSExpression来使用SQL中的IN函数?请给我指点一下。


在 NSPredicate 中也有类似的 IN 操作。 - Anupdas
请指出如何使用,谢谢。 - atastrophic
有人可以帮忙重新格式化Objective-C代码示例,以消除水平滚动条吗? - Henk Langeveld
1
@HenkLangeveld 完成了.. :) - atastrophic
我实际上是通过这个找到了纽约时报的风格指南。很高兴能看到一个例子! - Henk Langeveld
1个回答

8

NSPredicate也有类似的功能。

NSArray *skus = @[];
NSPredicate *predicate = [NSPredicate 
                              predicateWithFormat:@"AudioSKU IN %@",skus];

而且,您不能像处理普通字符串一样处理谓词字符串。您不能形成一个字符串数组并将其用于过滤。如果有多个连接,请使用NSCompoundPredicate

使用NSPredicate过滤数据是一个很好的参考资料。


1
你的回答差点让我尴尬到死,感觉自己太蠢了,没有尝试过那种方法... - atastrophic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接