Return Exposed DAO 中的空表达式?
Return empty expression in Exposed DAO?
我正在尝试使用 Exposed's DAO API 有条件地将一部分添加到我的 SQL 查询中。我的目标是:
SELECT * FROM table
WHERE column1 = 1
AND column2 = $value
AND column3 = 3
其中 AND column2 = $value
部分的存在取决于过滤器。
我试过:
TableDAO.find {
Table.column1 eq 1 and (
when (filter.value) {
null -> null // Type mismatch. Required: Expression<Boolean>. Found: Op<Boolean>?
else -> Table.column2 eq filter.value
}) and (
Table.column3 = 3
)
}.map { it.toModel() }
但我找不到 return 空表达式或以某种方式从查询中排除该部分的方法。我唯一可以解决的问题是
null -> Table.column2 neq -1
但我觉得应该有更好的方法。
您必须将您的表达式分配给局部变量:
var expr = Table.column1 eq 1
if(filter.value) {
expr = expr and (Table.column2 eq filter.value)
}
expr = expr and (
Table.column3 = 3
)
我前面没有我的IDE,但这是一般的想法。您可以尝试找出一些聪明的东西,但这会使您的代码不必要地复杂。
我正在尝试使用 Exposed's DAO API 有条件地将一部分添加到我的 SQL 查询中。我的目标是:
SELECT * FROM table
WHERE column1 = 1
AND column2 = $value
AND column3 = 3
其中 AND column2 = $value
部分的存在取决于过滤器。
我试过:
TableDAO.find {
Table.column1 eq 1 and (
when (filter.value) {
null -> null // Type mismatch. Required: Expression<Boolean>. Found: Op<Boolean>?
else -> Table.column2 eq filter.value
}) and (
Table.column3 = 3
)
}.map { it.toModel() }
但我找不到 return 空表达式或以某种方式从查询中排除该部分的方法。我唯一可以解决的问题是
null -> Table.column2 neq -1
但我觉得应该有更好的方法。
您必须将您的表达式分配给局部变量:
var expr = Table.column1 eq 1
if(filter.value) {
expr = expr and (Table.column2 eq filter.value)
}
expr = expr and (
Table.column3 = 3
)
我前面没有我的IDE,但这是一般的想法。您可以尝试找出一些聪明的东西,但这会使您的代码不必要地复杂。