[英]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中的变量设置节点标签的预期方法是什么?
标签不能在密码查询中参数化。 要创建带有动态标签的节点,可以在以下过程中使用APOC : CALL 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.