使用c#驱动程序在Cassandra中将UDT元素添加到列表集合的正确方法是什么?

时间:2015-09-04 19:15:32

标签: c# cassandra

我有一个UDT列表,例如:

create table MyTable
{
  ...
  stuff list<frozen<MyType>>,
  ...
}

在我的客户端代码中,我想在&#34; stuff&#34;中添加一个元素。理想情况下,我想做以下(或类似的事情):

this.Mapper<MyTable>("SET stuff = stuff + [?] WHERE id = ?", mytype, id);

不幸的是,这失败并出现以下错误:

Invalid list literal for stuff: bind variables are not supported inside collection literals

我可以通过将mytype转换为json来实现这一点,例如:

var stuffAsJson = stuff.ToJson();
var update = string.Format("SET stuff = stuff + [{0}] WHERE id = ?", commentAsJson);
this.Mapper.Update<MyTable>(update, stuffAsJson, id);

然而,知道如何将对象转换为json是很棘手的(例如,不是引用带双引号的字符,而是需要引用单引号)。

因此,我希望有更好的方法将类型元素添加到列表中。

感谢您的帮助, 埃里克

1 个答案:

答案 0 :(得分:7)

正确的CQL语法是:

UPDATE table1 SET stuff = stuff + ? WHERE id = ?

它需要list<MyType>类型的参数。在你的情况下,它将是:

this.Mapper<MyTable>(
  "SET stuff = stuff + ? WHERE id = ?", new List<MyType> {myItem}, id);