2016-06-21 2 views
2

私は前の質問を参照(ストアドプロシージャを呼び出すしたいと思います:。?しかし、私はかなり流暢なクエリインターフェイスを介してこれを行う方法を見ることができないQuestion with stored procedure for Neo4J as the answerneo4jclientでストアドプロシージャを呼び出す方法は?

誰が助けることはでき

私をサイファー問い合わせ:今まで

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

を取得することを目指します。また、ラベル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バグに示唆したように?

IRawGraphClient rgc = (IRawGraphClient) client; 

をし、クエリを呼び出す - それは少し不格好だが、このようになります::

本質的には、あなたはIRawGraphClientインスタンスにあなたが持っているGraphClientインスタンスをキャストすることができ

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%確実ではありませんが、試してみてください。

私はそんなに簡単にデータベースにCYPHER querysを送るgraphclientを使用していない.Call/.Yield<T>方法ソートsomepoint

+0

クリスに戻ってくれてありがとう。私は質問をする場所がどこにあるのか分からなかった。私はこれを試してみましょう。 IRawGraphClientをドキュメントの状態として使用することは避けていました。本当に必要な場合を除いては使用しないでください。それはいつでも変更できますが、これが受け入れ可能なユースケースであれば、試してみましょう。 –

+0

ええ、それは痛みですが、この場合は最善のアプローチです。私はすぐに「コール」と収量を得て、適切なアプローチに戻ることができます! –

+0

私は投稿をしました - それは助けるかもしれません:http://geekswithblogs.net/cskardon/archive/2016/06/22/calling-stored-procs-in-neo4j-using-neo4jclient-ndashthe-hacky-way-again。aspx –

関連する問題