如何获取对象集合 <edge, vertex> Neo4jClient .NET Cypher vs. C#

How get a collection of objects <edge, vertex> Neo4jClient .NET Cypher vs. C#

    public IEnumerable<EdVeObj> Parse(string word)
    {
        var res = graphClient.Cypher.OptionalMatch($"(a{{name:'{word}'}})-[r]->(b)") 
        .Return((a, r, b) => new EdVeObj{RelUp = r.As<Edge>(), Target = b.<Vertex>()}).Results;            
        return res;
    }
    public class EdVeObj
    {                
        public Edge RelUp { get; set; }
        public Vertex Target { get; set; }
    }

我需要遍历所有出边并获得对象集合:边加上它到达的顶点。 请告诉我:如何执行此迭代?

这个问题不是很清楚,但正如 Gabor 所提到的,如果你想遍历你的结果,你可以使用 foreach,即:

var results = Parse("word");
foreach(var ev in results){
    //Do something with ev
}

您同样可以使用 for 循环 - 但您需要 .ToList() 结果:

var results = Parse("word").ToList();
for(int i = 0; i < results.Count; i++){
    //Do something with results[i]
}

你的 cypher 会从一些调整中受益,首先 - 没有必要使用 OptionalMatch - 你需要结果存在,如果那里什么都没有那么它会 return 无论如何。另外-您确实应该使用某种 label ,至少在 a 节点上。您还应该使用 parameters 从服务器获得更多性能。

我会将您的代码更改为:

public IEnumerable<EdVeObj> Parse(string word)
{
    var res = graphClient.Cypher
        .Match("(:YOUR_LABEL_HERE {name:$word})-[r]->(b)") 
        .WithParam("word", word)
        .Return((r, b) => new EdVeObj
            {
                RelUp = r.As<Edge>(), 
                Target = b.<Vertex>()
            })
        .Results;            

    return res;
}

在任何大图上,这都会很长 运行 :/