我是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
为什么世界上是变量名称的额外感叹号?
答案 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及以上版本。