我遇到的问题是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))
答案 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}
的内容。我会另外测试一下。