WHERE子句中的Lambda表达式无法按预期工作

时间:2013-08-24 22:47:30

标签: neo4jclient

我是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

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

3 个答案:

答案 0 :(得分:0)

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

有关详细信息,请参阅Neo4J Documentation

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

WHERE (n.Name != {p0})

但是没有得到任何警告,并且如果我使用,则成功完成:

WHERE (n.Name! = {p0})

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

在与Neo2j 2.0交谈时修复了Neo4jClient 1.0.0.625及以上版本。