无法在neo4jClient中执行Cypher查询作为字符串

时间:2014-12-28 16:30:57

标签: neo4j neo4jclient

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)'无法从使用中推断出来。尝试明确指定类型参数。

这方面的任何帮助都会很棒..

1 个答案:

答案 0 :(得分:2)

首先,我认为需要动态分配标签并不是避免使用Neo4jClient流畅API和其他助手的理由。如果您需要小心,可以动态构建/格式化Cypher的标签部分,而不会将代码暴露给可能的注入漏洞。

然而,为了更具体地解决您的问题,我认为上述代码存在两个主要问题:

  1. 由于缺少括号,您的Cypher syntax错误,并且CREATE语句在没有RETURN子句的情况下不会返回任何结果。您应该将Cypher语法更改为CREATE (n:Person) RETURN n,如果这是您想要的。
  2. ExecuteGetCypherResults方法需要一个泛型类型参数,指示您返回的结果类型。我不是试图猜测您在上面尝试创建的节点的属性,而是简单地将您引用到Neo4jClient源中的relevant tests,以获取有关如何使用此方法的示例。您的方法调用需要看起来更像ExecuteGetCypherResults<Person>(...),其中Person是合适的类型。
  3. 最后,我再次回到原点再强调 - 正如Neo4jClient的作者所说,这种做法非常气馁。如果你因某种原因坚持这样做,我建议你自己完全抛弃Neo4jClient并自己在Neo4j服务器REST API周围构建自己的包装器,因为你需要这样做。将与Neo4jClient软件的工作方式作斗争,同时完全无法从中获益。