Sqlite.swift创建动态复杂查询

时间:2015-07-23 18:19:42

标签: ios swift sqlite.swift

我有一个包含多列的表。 在应用程序上,我们期待添加4个动态过滤器,如(猫,大小,颜色,形状)。

我们知道我们可以像sqllite一样创建一个过滤器:

user = user.select(name) 
        .filter((color == "Blue") && (size = "Big") && (cat="a") && (shape="round")) 
        .order(name.asc, name) // ORDER BY "email" DESC, "name"
        .limit(5, offset: 0)

但是如果过滤器会发生什么,让我们说我们想要搜索所有颜色的颜色。然后,

.filter((color == "?????") && (size = "Big") && (cat="a") && (shape="round"))

有关如何为此案例创建动态过滤器的任何想法?

1 个答案:

答案 0 :(得分:6)

filter()方法采用Expression<Bool>参数, 可以使用逻辑运算符&&||等动态创建复合表达式。

简单示例:

// Start with "true" expression (matches all records):
var myFilter = Expression<Bool>(value: true)

// Dynamically add boolean expressions:
if shouldFilterColor {
    myFilter = myFilter && (color == "Blue")
}
if shouldFilterSize {
    myFilter = myFilter && (size == "Big")
}
// ... etc ...

// Use compound filter:
query = user.select(name) 
        .filter(myFilter) 
        .order(name.asc, name)
        .limit(5, offset: 0)