Iam尝试在形成字符串并将其传递给Neo4jClient的ExecuteCypherResults API后执行CypherQuery。我试图这样做是因为需要动态创建节点和适当的标签。 Paramter Substituion不适用于标签,因此我形成了一个密码查询字符串并尝试执行。
String qry="";
qry="Create n:Person";
GraphClient client=new GraphClient(new Uri("localhost:7474/db/data"));
client.Connect();
var results = ((IRawGraphClient)client).ExecuteGetCypherResults(new CypherQuery(qry,null, Neo4jClient.Cypher.CypherResultMode.Projection));
执行时我收到以下错误:编译错误消息:CS0411:方法的类型参数' Neo4jClient.IRawGraphClient.ExecuteGetCypherResults(Neo4jClient.Cypher .CypherQuery)'无法从使用中推断出来。尝试明确指定类型参数。
这方面的任何帮助都会很棒..
答案 0 :(得分:2)
首先,我认为需要动态分配标签并不是避免使用Neo4jClient流畅API和其他助手的理由。如果您需要小心,可以动态构建/格式化Cypher的标签部分,而不会将代码暴露给可能的注入漏洞。
然而,为了更具体地解决您的问题,我认为上述代码存在两个主要问题:
CREATE (n:Person) RETURN n
,如果这是您想要的。ExecuteGetCypherResults
方法需要一个泛型类型参数,指示您返回的结果类型。我不是试图猜测您在上面尝试创建的节点的属性,而是简单地将您引用到Neo4jClient源中的relevant tests,以获取有关如何使用此方法的示例。您的方法调用需要看起来更像ExecuteGetCypherResults<Person>(...)
,其中Person是合适的类型。最后,我再次回到原点再强调 - 正如Neo4jClient的作者所说,这种做法非常气馁。如果你因某种原因坚持这样做,我建议你自己完全抛弃Neo4jClient并自己在Neo4j服务器REST API周围构建自己的包装器,因为你需要这样做。将与Neo4jClient软件的工作方式作斗争,同时完全无法从中获益。