Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Sqlite.swift创建动态复杂查询_Ios_Swift_Sqlite.swift - Fatal编程技术网

Ios Sqlite.swift创建动态复杂查询

Ios Sqlite.swift创建动态复杂查询,ios,swift,sqlite.swift,Ios,Swift,Sqlite.swift,我有一个包含多列的表。 在应用程序中,我们期待添加4个动态过滤器,如(猫、大小、颜色、形状) 我们知道我们可以为sqllite创建一个过滤器,如下所示: user = user.select(name) .filter((color == "Blue") && (size = "Big") && (cat="a") && (shape="round")) .order(name.asc, name) // ORD

我有一个包含多列的表。 在应用程序中,我们期待添加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"))
有没有关于如何为这种情况创建动态过滤器的想法

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

简单的例子:

// 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)
//以“true”表达式开头(匹配所有记录):
var myFilter=表达式(值:true)
//动态添加布尔表达式:
如果应该过滤颜色{
myFilter=myFilter&&(颜色==“蓝色”)
}
如果应该过滤{
myFilter=myFilter&&(大小=“大”)
}
// ... 等
//使用复合过滤器:
查询=用户。选择(名称)
.filter(myFilter)
.订单(name.asc,name)
.限制(5,偏移量:0)

由于某些原因,过滤器在我这边不起作用,它没有标记错误或警告,这似乎是一个很好的方法。我尝试过这个(删除了ifs),但没有运气。var myFilter=Expression(value:true)myFilter=myFilter&&(name==“Facebook”)@edse:我只能说,它在我的简单测试中起了作用。请注意,您可以使用
println(myFilter.SQL)
println(myFilter.bindings)
检查生成的SQL代码,这可能有助于隔离问题。毫无疑问,这是解决方案,但我似乎无法使其正常工作。这是我的代码,但不知道为什么在过滤时它不起作用S由于过滤器正在动态构建,因此可以通过设置基本查询来避免
true
表达式:
let base=users。选择(name.order(name.asc)。限制(5);让过滤:查询;如果shouldFilterColor{filtered=base.filter(color==“Blue”)}…