如何获取对象集合 <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;
}
在任何大图上,这都会很长 运行 :/
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;
}
在任何大图上,这都会很长 运行 :/