使用CassandraCSharpDriver 3.16.3,如何绑定数组参数?

rbl8hiat  于 11个月前  发布在  Cassandra
关注(0)|答案(1)|浏览(116)

我试图将一个值数组绑定到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),因为这个字段是分区键的一部分。

o8x7eapl

o8x7eapl1#

可能有两个问题。第一个是在准备语句时不需要括号:

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#的类型Map请参考文档here

相关问题