neo4jclient where子句没有放入参数

时间:2013-03-30 13:11:57

标签: neo4j cypher neo4jclient

我遇到的问题是Where子句没有提取值并将它们作为参数。

return 
   startingNode
   .StartCypher("startNode")
   .Match(matchQuery)
   .Where<TSourceNode>(otherStartNodes => otherStartNodes.Id != startingNode.Data.Id)                
   .Return<TSourceNode>("otherStartNodes").Results;                        

查询字符串看起来像“WHERE(Id&lt;&gt; Id)”。我可以通过不使用lambdas并使用下面的代码轻松解决问题,但我很想知道为什么它不起作用

.Where("startNode.Id <> otherStartNodes.Id")

我也尝试了以下这一行,但这也没有用。

.Where<TSourceNode, TSourceNode>((otherStartNodes, startNode) => otherStartNodes.Id != startNode.Id)      

修改 Tatham - 我在Bitbucket中为此创建了一个问题。

对于Where子句应该是正确的方法。

.Where<TSourceNode, TSourceNode>((otherStartNodes, startNode) => otherStartNodes.Id != startNode.Id))

1 个答案:

答案 0 :(得分:1)

更新:这是issue 73,已在1.0.0.525及更高版本中修复。

根据我对您的相当动态的查询的理解,您提到的第三个选项(.Where<TSourceNode, TSourceNode>((otherStartNodes, startNode) => otherStartNodes.Id != startNode.Id))是正确的。

这应该有效。我甚至在Neo4jClient中添加了更多的单元测试来断言它:https://bitbucket.org/Readify/neo4jclient/commits/cc73ce253ddce89e69785caa68f5e4660a622b96

你能解释为什么你认为它不起作用吗?结果查询文本是什么?


您为.Where<TSourceNode>(otherStartNodes => otherStartNodes.Id != startingNode.Data.Id)获得的价值是错误的。它应该在.NET中评估startingNode.Data.Id一次,然后通过网络发送类似WHERE otherStartNodes.Id <> {p1}的内容。我会另外测试一下。