繁体   English   中英

您如何在neo4jclient中以编程方式设置节点的标签?

[英]How do you programmatically set a node's label in neo4jclient?

我有一个字符串nodeType ,它需要作为节点的标签存储在neo4j中。 在Cypher中,这将是

CREATE (n:nodeType)

其中, nodeType是在此操作之前设置的字符串。 在neo4jclient中,我尝试过

.Create("(x:{type})")
.WithParam("type", nodeType)

但这显然不是参数的正确用法,并且会导致错误

Unhandled Exception: Neo4jClient.NeoException: SyntaxError:
Invalid input '{': expected whitespace or a label name
"CREATE (x:{type})"
           ^

将标签添加项移动到单独的设置操作中会产生相同的错误。

.Create("(x)")
.Set("x :{type}")
.WithParam("type", nodeType)

官方的neo4jclient参数文档说:“您可以在流畅的查询中的任何时候创建参数...”,但事实并非如此,因为开括号并没有被视为参数的开始。密码引擎。 我在这里做错了什么?

由于字符串连接是一个非常非常糟糕的主意,从neo4jclient中的变量设置节点标签的预期方法是什么?

标签不能在密码查询中参数化。 要创建带有动态标签的节点,可以在以下过程中使用APOCCALL apoc.create.node(['Label'], {key:value,…​})

我个人会这样做:

var nodeType = "MyNode";
client.Cypher.Create($"(x:{nodeType})").ExecuteWithoutResults();

或者如果您不能使用C#6:

client.Cypher.Create(string.Format("(x:{0})", nodeType).ExecuteWithoutResults()

我认为在这里要注意的是,这两个都没有使用字符串连接。 这就是string.Format和字符串插值旨在帮助的内容。

logisima是正确的,您无法通过Cypher进行操作,并且如果您确实需要这样做,则唯一的选择就是转移到APOC,但是使用字符串选项会更容易

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM