我一直在试验Neo4J并且文本查询工作正常。然后我切换到.Net中的Neo4JClient,现在我想使用CypherFluentQuery,但是出于一些非常奇怪的原因,生成的查询不包括节点ID,而只包括{p0},p {1}等占位符... ) 我错过了什么?
下面是我的简单查询示例:
文字查询(工作精细):
string textQuery = "START user=node(9,7,8,10,11) " +
"MATCH user-[:is_friend_of]->isfriendof " +
"RETURN user.name as user,isfriendof.name as IsFriendOf";
CypherQuery query = new CypherQuery(textQuery,
new Dictionary<string, object>(),
CypherResultMode.Projection);
var nodes = client.ExecuteGetCypherResults<MyNode>(query).ToList();
现在CypherFluentQuery(THROWS EXCEPTION):
NodeReference<TestNode> node1 = new NodeReference<TestNode>(9);
NodeReference<TestNode> node2 =new NodeReference<TestNode>(7);
NodeReference<TestNode> node3 = new NodeReference<TestNode>(8);
NodeReference<TestNode> node4 = new NodeReference<TestNode>(10);
NodeReference<TestNode> node5 = new NodeReference<TestNode>(11);
NodeReference [] nodes = { node1, node2, node3, node4, node5 };
var results = new CypherFluentQuery(client)
.Start("user", nodes)
.Match("user-[:is_friend_of]->isfriendof")
.Return<MyNode>("user.name as user,isfriendof.name as IsFriendOf", CypherResultMode.Projection)
.Results.ToList();
引用的节点类是:
public class MyNode
{
public string user { get; set; }
public string IsFriendOf { get; set; }
}
public class TestNode
{
public string name { get; set; }
}
EXCEPTION THROWN:
Received an unexpected HTTP status when executing the request.
The query was: START user=node({p0}, {p1}, {p2}, {p3}, {p4})
MATCH user-[:is_friend_of]->isfriendof
RETURN user.name as user,isfriendof.name as IsFriendOf
The response status was: 400 Bad Request
的更新 的 我用nugget更新了Neo4JClient,现在显然我不能使用ExecuteGetCypherResults,所以我想我现在的问题比以往更有效: - /
答案 0 :(得分:0)
{p0}
样式占位符是正确的。 (参见https://bitbucket.org/Readify/neo4jclient/wiki/cypher的参数部分,了解它们存在的原因)。
来自Neo4j的400错误意味着它不喜欢发送的查询文本。
在您的问题中,您已在有用部分截断了异常消息。我们需要响应机构来查看Neo4j遇到的问题,这是在响应状态之后。
要在本地调试查询文本,还有https://bitbucket.org/Readify/neo4jclient/wiki/cypher
中描述的技术