我试图将一个值数组绑定到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
),因为这个字段是分区键的一部分。
1条答案
按热度按时间o8x7eapl1#
可能有两个问题。第一个是在准备语句时不需要括号:
字符串
第二是查询时CQL数据类型必须匹配你的C#数据类型,即
var buckets = new List<double> { 4, 5, 6, 7 };
表示bucket列必须是double类型。CQL和C#的类型Map请参考文档here。