Sqlite.swift create dynamic complex queries

爱⌒轻易说出口 提交于 2019-12-07 22:07:15

问题


I have 1 table with multiple columns. On the app, we are looking forward to add 4 dynamic filters like (cat, size, color,shape).

We know we can create a filter to sqllite like so:

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)

But what happens if a filter, let's say that for color we want to search for all colors. Then,

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

Any ideas on how to create dynamic filters for this case?


回答1:


The filter() method takes an Expression<Bool> argument, and compound expressions can be created dynamically with the logical operators &&, ||, etc.

Simple example:

// 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)


来源:https://stackoverflow.com/questions/31595212/sqlite-swift-create-dynamic-complex-queries

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!