2014-12-28 76 views
0

Iam在形成字符串並將其傳遞給Neo4jClient的ExecuteCypherResults API後嘗試執行CypherQuery。我試圖這樣做是因爲需要動態創建節點和適當的標籤。參數替代不適用於標籤,因此我形成了一個密碼查詢字符串並試圖執行。無法在neo4jClient中以字符串形式執行Cypher查詢

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)」不能從使用推斷。嘗試明確指定類型參數。

在這方面的任何幫助將是巨大的..

回答

2

首先,這是我認爲需要動態地分配標籤是不是一個理由,以避免使用Neo4jClient流利的API和其他幫助。如果您小心,您可以動態構建/格式化您的Cypher的標籤部分,而不會將您的代碼暴露給可能的注入漏洞。

爲了解決你的問題更具體,但是,我認爲有與上面的代碼中兩個主要問題:

  1. Cypher syntax是錯誤的,由於缺少括號,和CREATE語句不返回任何結果沒有RETURN子句。如果這是你想要的,你應該將Cypher語法改成類似CREATE (n:Person) RETURN n的東西。
  2. 0123'方法需要一個泛型類型參數,指示您要返回的結果的類型。與其試圖猜測上面要創建的節點的屬性,我只是將您引用到Neo4jClient源中的relevant tests以獲取有關如何使用此方法的示例。您的方法調用需要看起來更像ExecuteGetCypherResults<Person>(...),其中Person是一個合適的類型。

最後,我就回到原來的點再次強調 - 作爲Neo4jClient的作者說,這種做法是非常氣餒。如果你出於某種原因確實堅持這種方式,那麼我建議你最好完全拋棄Neo4jClient並自己構建自己的Neo4j服務器REST API的包裝器,因爲你將會對抗Neo4jClient軟件的設計工作方式,同時根本沒有從中獲得任何好處。

+0

非常感謝您的建議Pat。在這種需求出現的整個解決方案中,這只是一個例子。我一直在廣泛使用Neo4jclient,並充分認識其架構和價值支柱。異常是異常,Neo4JClient已經提供了一個API來處理這個異常,我試圖從社區獲得幫助來使用它。再次感謝您的幫助和建議。 – cheenu

+0

那麼你是否解決了這個問題? – Pat