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

问题描述 投票:0回答:1

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

c# cassandra datastax cql
1个回答
0
投票

可能有 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# 之间的类型映射,请参阅文档此处

© www.soinside.com 2019 - 2024. All rights reserved.