Optic api 如何在列表中的位置进行操作?
How can Optic api do where in list?
我有以下使用 op:from-view
的 XQuery 代码。
在 op:where
部分,我试图 select 一个可以等于值列表的列。
当我使用 op:eq(op:col("client"), $client1)
这样的值时,它工作正常。
但是我需要它 select ($client1, $client2)
。
我怎么做?
我似乎无法在任何地方找到一个例子。
谢谢。
Optic 目前没有 in() 运算符,因此必须将条件传递给 Optic as
op:or((op:eq(op:col("client"), $client1), op:eq(op:col("client"), $client2)))
为了不那么乏味,一种可能是利用 build-time 表达式,如:
op:or(
let $col := op:col("client")
for $val in ($client1, $client2)
return op:eq($col, $val)
)
或者将该表达式包装在辅助函数中:
declare function local:in($colName as xs:string, $vals) {
op:or(
let $col := op:col($colName)
for $val in ($vals)
return op:eq($col, $val)
)
};
并按如下方式使用它:
op:where(
local:in("client", ($client1, $client2))
)
希望对您有所帮助,
我有以下使用 op:from-view
的 XQuery 代码。
在 op:where
部分,我试图 select 一个可以等于值列表的列。
当我使用 op:eq(op:col("client"), $client1)
这样的值时,它工作正常。
但是我需要它 select ($client1, $client2)
。
我怎么做?
我似乎无法在任何地方找到一个例子。
谢谢。
Optic 目前没有 in() 运算符,因此必须将条件传递给 Optic as
op:or((op:eq(op:col("client"), $client1), op:eq(op:col("client"), $client2)))
为了不那么乏味,一种可能是利用 build-time 表达式,如:
op:or(
let $col := op:col("client")
for $val in ($client1, $client2)
return op:eq($col, $val)
)
或者将该表达式包装在辅助函数中:
declare function local:in($colName as xs:string, $vals) {
op:or(
let $col := op:col($colName)
for $val in ($vals)
return op:eq($col, $val)
)
};
并按如下方式使用它:
op:where(
local:in("client", ($client1, $client2))
)
希望对您有所帮助,