2013-05-06 79 views
1

您好,我想执行下面的Cypher查询来计算我指定的节点与多少个节点有关系,并且我在本例中通过了nodeName计算节点的Cypher查询问题?

下面是该查询:

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); 
    } 

这里是堆栈跟踪:

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

请您说明您面临的问题?任何异常或没有结果等? – Gopi 2013-05-06 10:17:29

+0

@戈皮我已经更新了这个问题,我得到一个NullReferenceException /对象引用未设置为对象的实例。 – 2013-05-06 10:24:13

+0

在这种情况下,提供堆栈跟踪也是有帮助的。 – Gopi 2013-05-06 10:27:33

回答

2

我认为你运行的是Neo4jClient的一个非常旧的版本。我认为这是因为:a)你没有PDB和b)它不会因为你不能在你的Return调用中使用命令而出现一个很好的错误。

  1. 请更新Neo4jClient
  2. 如果它仍然崩溃,发布新的堆栈跟踪https://bitbucket.org/readify/neo4jclient/issues/new,所以我们可以跟踪和修正错误

这些天来,您的查询应该是这样的:

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(); 

(注意:我在这里输入了文本框中的内容,所以我没有测试它,但它应该是正确的。)

+0

Tatham to the rescue! – 2013-05-06 15:08:33

0

我不知道C#的语法什么,但你可以尝试以下查询:

START n=node:NameIndex("Name:Mike") 
MATCH (n)-->(x) 
RETURN n, count(*) 

也许query.Results返回空值,这样.ToList()产生NullReference例外。

+0

查看 - > http://hg.readify.net/neo4jclient/wiki/cypher – 2013-05-06 10:46:25