Cypher查询计数节点的问题?

时间:2013-05-06 10:04:46

标签: c# neo4j neo4jclient

您好,我想执行以下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对象引用未设置为对象的实例。 我错过了什么?

2 个答案:

答案 0 :(得分:2)

我认为你正在运行一个非常旧版本的Neo4jClient。我认为这是因为a)你没有PDB和b)它没有弄清楚为什么你不能在你的Return调用中使用命令这个错误。

  1. 请更新Neo4jClient
  2. 如果它仍然崩溃,请将新堆栈跟踪发布到https://bitbucket.org/readify/neo4jclient/issues/new,以便我们跟踪并修复错误
  3. 现在,您的查询应如下所示:

    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异常。