4

我是 Neo4j 的新手,并尝试在 where 子句中使用 lambda 表达式进行简单的 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");        

如果我转储我得到的文本和参数:

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

当我执行此操作时,我当然会得到:

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

为什么在世界上是一个额外的感叹号到变量的名称?

4

3 回答 3

0

!意味着如果该属性不存在,则结果将为 false。因此,如果您在图中有多个类型,并且其他类型没有“名称”属性,neo4j 将不会打扰匹配。

有关更多信息,请参阅Neo4J 文档

至于获得 != 警告,您在粘贴时是否更改了查询?重新格式化?如果我这样做,我会收到同样的警告:

WHERE (n.Name != {p0})

但如果我使用以下命令,则不会收到任何警告,并且会成功完成:

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

我想我在这里找到了问题的原因:

对默认实现 NULL IF 的 2.0 解析器进行了更改(而不是在缺少的属性上返回错误)并删除 ! 和 ?运营商,因为他们不再做任何事情。

neo4j pull request 1014 我怀疑这会破坏很多东西,而不仅仅是 Neo4J 客户端。

于 2013-08-25T20:33:14.443 回答
0

在 Neo4jClient 1.0.0.625 及更高版本中与 Neo2j 2.0 对话时已修复。

于 2013-10-25T22:46:18.303 回答