您好,我想执行以下Cypher查询,该查询计算指定节点与之关系的节点数,并在此示例中传递nodeName
。
以下是查询:
START n=node:NameIndex(Name = "Mike")
MATCH (n)-->(x)
RETURN n, count(*)
这是我的尝试:
public IEnumerable<VersionNode> GraphNodeCount(string nodeName)
{
GraphQueryLogger.Trace("Now entering GraphNodeCount(string nodeName) Method");
IEnumerable<VersionNode> queryResult = null;
clientConnection = graphOperations.GraphGetConnection();
var query = clientConnection
.Cypher
.Start(new CypherStartBitWithNodeIndexLookup("n", "NameIndex", "Name", nodeName))
.Match("n", "-->", "x")
.Return<VersionNode>("n, count(*)");
queryResult = query.Results.ToList();
return queryResult;
}
这是我的主要方法:
GraphQuery graphQuery = new GraphQuery();
var query = graphQuery.GraphNodeCount("Mike");
foreach (var item in query)
{
Console.WriteLine(item.Name);
}
这是stacktrace:
at System.Threading.Tasks.Task.WaitAll(Task[] tasks, Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.WaitAll(Task[] tasks, Int32 millisecondsTimeout)
at System.Threading.Tasks.Task.WaitAll(Task[] tasks)
at Neo4jClient.GraphClient.Neo4jClient.IRawGraphClient.ExecuteGetCypherResults[TResult](CypherQuery query)
at Neo4jClient.Cypher.CypherFluentQuery`1.get_Results()
at ContentManager_Test.ContentManager_Library.Level_1_API.Graph.Query.GraphQuery.GraphNodeCount(String nodeName)
我得到NullReferenceException was unhandled
对象引用未设置为对象的实例。
我错过了什么?
答案 0 :(得分:2)
我认为你正在运行一个非常旧版本的Neo4jClient。我认为这是因为a)你没有PDB和b)它没有弄清楚为什么你不能在你的Return
调用中使用命令这个错误。
现在,您的查询应如下所示:
var queryResults = clientConnection
.Cypher
.Start(new {
n = Node.ByIndexLookup("NameIndex", "Name", nodeName)
})
.Match("n-->x")
.Return(n => new {
Foo = n.As<VersionNode>(),
CountOfAllNodes = All.Count()
})
.Results
.ToList();
(注意:我在这里的文本框中手动输入了,所以我没有测试过,但它应该是正确的。)
答案 1 :(得分:0)
我对C#语法一无所知,但您可以尝试以下查询:
START n=node:NameIndex("Name:Mike")
MATCH (n)-->(x)
RETURN n, count(*)
也许query.Results
返回null,以便.ToList()
生成NullReference异常。