4

私はNeo4jを初めて使用し、where句でラムダ式を使用して単純なCypherクエリを実行しようとしていますが、何らかの理由でこれが機能しない理由を理解できないようです.

次のように見えます:

class HealthNode { 
    public string Name{get;set;}
    //Other Stuff
}
string Name = "Foobar";

var query = client
    .Cypher
    .Start(new { n = Neo4jClient.Cypher.All.Nodes })
    .Where((HealthNode n) => n.Name == Name)
    .Return<HealthNode>("n");        

Text と Parameters をダンプすると、次のようになります。

START n=node(*)
WHERE (n.Name! = {p0})
RETURN n
//P0 Foobar

これを実行すると、もちろん次のようになります。

Cypher does not support != for inequality comparisons. Use <> instead

なぜ世界で変数の名前に余分な感嘆符があるのですか?

4

3 に答える 3

0

ここで問題の原因を見つけたと思います:

デフォルトで NULL IF を実装する 2.0 パーサーに変更が加えられ (欠落しているプロパティに対してエラーを返す代わりに)、! と ?オペレーターは何もしないからです。

neo4j プル リクエスト 1014 これは、Neo4J クライアントだけでなく、多くのものを壊すのではないかと思います。

于 2013-08-25T20:33:14.443 に答える
0

!プロパティが存在しない場合、結果が false になることを意味します。したがって、グラフに複数のタイプがあり、他のタイプに「名前」プロパティがない場合、neo4j はマッチングを気にしません。

詳細については、 Neo4J のドキュメントを参照してください。

!= 警告の取得に関しては、貼り付け時にクエリをまったく変更していますか? それを再フォーマットしますか?私が行うと同じ警告が表示されるので:

WHERE (n.Name != {p0})

しかし、警告は表示されず、次を使用すると正常に完了します。

WHERE (n.Name! = {p0})
于 2013-08-25T15:34:49.840 に答える