0

クエリステートメントで parms の注入を使用したくない。したがって、NEO4J .NET クライアント クラスの次の命令を使用しました。

        var queryClassRelationshipsNodes = client.Cypher
                       .Start("a", (NodeReference)sourceReference.Id)
                        .Match("a-[Rel: ***{relationshipType***}    ]->foundClass")
                         .Where("Rel.RelationStartNode  =" + "\'" + relationshipStart + "\'")
                         .AndWhere("Rel.RelationDomainNode  =" + "\'" + relationshipDomain + "\'")
                         .AndWhere("Rel.RelationClassNode  =" + "\'" + relationshipClass + "\'")
                         .WithParam("relationshipType", relationshipType)
                        .Return<Node<Dictionary<string, string>>>("foundClass")
                        .Results;

ただし、このコードはサーバーによって実行されると機能しません。何らかの理由で、PARM: relationshipType が、{} の間に入れた変数に関連付けられていません。

誰かがこのコードの問題をデバッグするのを手伝ってくれませんか? ステートメント内に変数を挿入するよりも、WithParms を使用することをお勧めします。

どうもありがとう!

4

1 に答える 1

2

誰かがこのコードの問題をデバッグするのを手伝ってくれませんか?

これを行う方法を説明する「デバッグ」というタイトルのhttps://bitbucket.org/Readify/neo4jclient/wiki/cypherのセクションがあります。

ただし、コアの問題に関しては、アプローチはCypherの制限に達しています。パラメーターは、クエリ プランにコンパイルされないクエリの部分用です。ただし、一致句はそうです。

Neo4j のドキュメントから:

パラメーターは、WHERE 句のリテラルと式、START 句のインデックス キーとインデックス値、インデックス クエリ、および最後にノード/関係 ID に使用できます。プロパティ表記は、クエリ プランにコンパイルされるクエリ構造の一部であるため、パラメータをプロパティ名として使用することはできません。

次のようなことができます:

.Match("a-[Rel:]->foundClass")
.Where("type(Rel) = {relationshipType}")
.WithParam("relationshipType", relationshipType)

(免責事項:ここに入力したところです。まったくテストしていません。)

ただし、すべての関係を取得してからそれらのタイプをテストする必要があるため、おそらく遅くなります。これをテストする必要があります。match 句がクエリ プランにコンパイルされるのには理由があります。

于 2013-06-04T03:43:41.780 に答える