我正在尝试将值数组绑定到PreparedStatement 中的IN 子句,但我不确定如何操作。
这是我正在尝试做的一个最小的例子:
private const string EXAMPLE_STATEMENT = "SELECT * FROM table WHERE owner = ? and bucket in (?)";
var _exampleStatement = new Lazy<Task<PreparedStatement>>(() => GetSession().PrepareAsync(EXAMPLE_STATEMENT));
var buckets = new List<double> { 4, 5, 6, 7 };
var result = await GetSession().ExecuteAsync(
(await _exampleStatement.Value).Bind(
"foo",
buckets
));
CQL 中的等效项是:
SELECT * FROM table WHERE owner = 'foo' and bucket in (4, 5, 6, 7);
非数组参数的绑定按预期工作。
我无法使用过滤(
bucket >= 4 and bucket <= 7
),因为该字段是分区键的一部分。
可能有 2 个问题。首先,准备陈述时不需要括号:
private const string EXAMPLE_STATEMENT = "SELECT * FROM table WHERE owner = ? and bucket in ?";
第二个是查询时CQL数据类型必须与你的C#数据类型匹配,即
var buckets = new List<double> { 4, 5, 6, 7 };
表示bucket列必须是double类型。有关 CQL 和 C# 之间的类型映射,请参阅文档此处。