C# 使用Neo4jClient在Neo4j中通过可变长度关系获取关系节点
我使用Neo4jClient,我想通过可变长度关系C# 使用Neo4jClient在Neo4j中通过可变长度关系获取关系节点,c#,.net,neo4j,neo4jclient,C#,.net,Neo4j,Neo4jclient,我使用Neo4jClient,我想通过可变长度关系(n:Users{id:1})-[r:FOLLOW*1..4](m:Users)返回r如何获取具有属性关系的节点,例如: Node[0]{id:1,name:"Oliver Stone"} Node[1]{id:2,name:"Charlie Sheen"} Node[2]{id:3,name:"Martin Sheen"} Node[3]{id:4,name:"TheAmericanPresident"} 我应该知道,节点[0]和节点[2]
(n:Users{id:1})-[r:FOLLOW*1..4](m:Users)返回r
如何获取具有属性关系的节点,例如:
Node[0]{id:1,name:"Oliver Stone"}
Node[1]{id:2,name:"Charlie Sheen"}
Node[2]{id:3,name:"Martin Sheen"}
Node[3]{id:4,name:"TheAmericanPresident"}
我应该知道,节点[0]和节点[2]之间的属性关系是什么?(属性的意思是“FOLLOW”或“IGNORE”)
首先,如果您正在使用[r:FOLLOW*1..4]
您已经知道类型键,因为它在您的代码中,如果您想获得[r*1..4]
的类型键,那么您可以使用以下代码,主要的变化是我们将R
恢复为IEnumerable
,而不仅仅是直接的RelationshipInstance
运行上述代码将得到以下输出:
(1)-[:IGNORE]-(3)
(1)-[:FOLLOW]-(3)
您并不真正知道顺序是什么,并且存在冲突类型。假设您关注的是实际路线,而不仅仅是名称(我意识到情况可能并非如此),那么我们需要对查询进行更多的更改
如果查看要返回的RelationshipInstance
,您将看到它有两个属性:EndNodeReference
和StartNodeReference
,您还将注意到它们的Id
属性与对象中的任何Id都没有关系。在本例中,Id
与实际的Neo4j Id相关。要从中获取有意义的数据,我们需要获取该Id,这意味着使用节点
。理想情况下,我们不想这样做,但我不知道目前有任何其他方法可以获得路线
var query = Client.Cypher
.Match("(n:User)-[r*1..4]-(m:User)")
.Where((UserEntity n) => n.Id == 1)
.Return((n, r, m) => new
{
N = n.As<Node<UserEntity>>(), //<-- Node<T>
M = m.As<Node<UserEntity>>(), //<-- Node<T>
R = r.As<IEnumerable<RelationshipInstance<object>>>()
});
foreach (var item in res.ToList())
foreach (var relationshipInstance in item.R)
Console.WriteLine("({0})-[:{1}]-({2})", item.N.Data.Id, relationshipInstance.TypeKey, item.M.Data.Id);
var query=Client.Cypher
.Match(“(n:User)-[r*1..4]-(m:User)”)
.Where((用户实体n)=>n.Id==1)
.返回((n,r,m)=>新
{
N=N.As(),//TData
是关系的任何POCO,如果没有,则只需使用object
。NodeId
是StartNodeReference
或EndNodeReference
。
(1)-[:IGNORE]-(3)
(1)-[:FOLLOW]-(3)
var query = Client.Cypher
.Match("(n:User)-[r*1..4]-(m:User)")
.Where((UserEntity n) => n.Id == 1)
.Return((n, r, m) => new
{
N = n.As<Node<UserEntity>>(), //<-- Node<T>
M = m.As<Node<UserEntity>>(), //<-- Node<T>
R = r.As<IEnumerable<RelationshipInstance<object>>>()
});
foreach (var item in res.ToList())
foreach (var relationshipInstance in item.R)
Console.WriteLine("({0})-[:{1}]-({2})", item.N.Data.Id, relationshipInstance.TypeKey, item.M.Data.Id);