2016-06-21 43 views
2

我想調用存儲過程(見前面的問題:?Question with stored procedure for Neo4J as the answer不過,我不能完全看到這樣做,通過流暢的查詢界面的方式如何在neo4jclient中調用存儲過程?

誰能幫助

我Cypher支架查詢:

MATCH(user:UserAccount)-[:HasPermission]->(permission:Permission) 
WITH user, collect(permission) as permissions 
CALL apoc.map.setKey(user, 'permissions', permissions) YIELD value as UserAccount 
RETURN UserAccount 

我Neo4jClient代碼到現在:

_graphClient 
      .Cypher 
      .Match("(user:UserAccount)-[:HasPermission]->(permission:Permission)") 
      .With("user, collect(permission) as permissions") 
      // I need to call the stored procedure here. 
      .ReturnDistinct(
       (userAccount) => 
           new 
           { 
            UserAccount = userAccount.As<UserAccount>() 
           }); 
+0

我不使用graphclient我發暗號querys到數據庫中,以便更容易。還有標籤UserAccount的複雜並返回UserAccount – Mvde

+0

我會認爲我自己一樣,但我真的很喜歡你用neo4jclient獲得的序列化。雖然如果你有一個例子,並調用存儲過程,我很高興看到它! –

+0

我只是發送它,然後我填寫一個類與我的結果。如果你想做一些特別的事情,C#庫不能很好地工作。我是c#程序員。 – Mvde

回答

1

我將離開低於210的版本,但對於1.1.0.39版本(今天剛剛公佈),可以使用CallYield直接:

_graphClient.Cypher 
    .Match("(user:UserAccount)-[:HasPermission]->(permission:Permission)") 
    .With("user, collect(permission) as permissions") 
    .Call("apoc.map.setKey(user, 'permissions', permissions)").Yield("value AS UserAccount") 
    .ReturnDistinct(
     (userAccount) => new { UserAccount = userAccount.As<UserAccount>() }); 

舊版本(避免如果你能)

你嘗試IRawGraphClient正如我在你提出的GitHub bug中所建議的那樣?

在本質上,你可以投你有GraphClient實例的IRawGraphClient實例:

IRawGraphClient rgc = (IRawGraphClient) client; 

,然後用一個查詢調用 - 這是一個有點笨重,但會是這樣:

var queryText = @"MATCH(user:UserAccount)-[:HasPermission]->(permission:Permission) 
WITH user, collect(permission) as permissions 
CALL apoc.map.setKey(user, 'permissions', permissions) YIELD value as UserAccount 
RETURN UserAccount" 

var cypherQuery = new CypherQuery(queryText, null, CypherResultMode.Projection); 
var results = rgc.ExecuteGetCypherResults<UserAccount>(cypherQuery); 

認爲這將工作 - 我目前沒有3.0安裝測試,所以不能100%確定,但請嘗試看看。

我的目標是獲得一個.Call/.Yield<T>方法來分類somepoint

+0

謝謝你回到克里斯。我不知道提出問題的最佳位置(這裏還是github)。我會試試這個。我正在避免使用IRawGraphClient作爲文檔聲明,除非您真的需要它,並且它可以隨時更改,否則不應該使用它,但如果這是可接受的用例,那麼我會試一試。 –

+0

呃,這是一種痛苦,但在這種情況下,這是最好的方法,我會努力爭取'打電話'並儘快完成,以便您可以回到正確的方法! –

+0

我做了一個帖子 - 這可能有幫助:http://geekswithblogs.net/cskardon/archive/2016/06/22/calling-stored-procs-in-neo4j-using-neo4jclient-ndashthe-hacky-way-again。aspx –