如何使用 Neo4jClient 获取关系的 startNodeId 和 endNodeId?
How get relationship's startNodeId and endNodeId using Neo4jClient?
var query = client.Cypher
.Match("(n1)-[r]-[n2]")
.Where("n1.NodeId={startNodeId} and n2.NodeId={endNodeId}")
.WithParam("startNodeId",startNodeId)
.withParam("endNodeId",endNodeId)
.return((r,n1,n2)=>new {Edge=r.As<Node<string>>(),Type=r.Type()});
通过这种方式,我只能得到关系的Label和Properties。但是我还想得到关系的startNodeId和endNodeId .
顺便说一下,我可以使用 REST API 获取关系的 startNodeId 和 endNodeId。
谁能帮我?
Z.Tom
如果您知道要投射到的类,您可以使用:
var results= client.Cypher
.Match("(n1)-[r]-[n2]")
.Where("n1.NodeId={startNodeId} and n2.NodeId={endNodeId}")
.WithParam("startNodeId",startNodeId)
.withParam("endNodeId",endNodeId)
.Return((n1, r1 n2) => new {Edge=r.As<Node<string>>(),Type=r.Type()}, Class1= n1.As<Class1>(), Class2= n2.As<Class2>()})
.Results;
然后您可以遍历结果。如果只有一个结果是预期的 'results' 数组
中的第一项
这取决于 startNodeId
的含义 - 如果您指的是 Neo4j
ID,那么您将需要使用 Relationship<T>
class :
client.Cypher
.Match("(n1)-[r]-(n2)")
//Your where stuff here.
.Return(r => r.As<RelationshipInstance<string>());
T
应该是你在关系上设置的类型,但如果你没有,就用object
,你会需要使用Relationship<T>
类型,不能使用非通用版本。
如果 startNodeId
是类型上的 属性,那么您可以执行 r => r.As<YourType>()
或 r => r.As<Relationship<YourType>>()
。
作为旁注,您可以使用 Neo4jClient
的能力来解析参数并保存一些代码(同时使其 更多 编译安全)关于您的 Where
条款。
我会把你的代码写成:
var query = client.Cypher
.Match("(n1)-[r]-[n2]")
.Where((NodeType n1) => n1.NodeId == startNodeId)
.AndWhere((NodeType n2) => n2.NodeId == endNodeId)
.Return(r => new { Edge = r.As<RelationshipInstance<object>>(), Type = r.Type()});
自动解析参数
var query = client.Cypher
.Match("(n1)-[r]-[n2]")
.Where("n1.NodeId={startNodeId} and n2.NodeId={endNodeId}")
.WithParam("startNodeId",startNodeId)
.withParam("endNodeId",endNodeId)
.return((r,n1,n2)=>new {Edge=r.As<Node<string>>(),Type=r.Type()});
通过这种方式,我只能得到关系的Label和Properties。但是我还想得到关系的startNodeId和endNodeId . 顺便说一下,我可以使用 REST API 获取关系的 startNodeId 和 endNodeId。 谁能帮我?
Z.Tom
如果您知道要投射到的类,您可以使用:
var results= client.Cypher
.Match("(n1)-[r]-[n2]")
.Where("n1.NodeId={startNodeId} and n2.NodeId={endNodeId}")
.WithParam("startNodeId",startNodeId)
.withParam("endNodeId",endNodeId)
.Return((n1, r1 n2) => new {Edge=r.As<Node<string>>(),Type=r.Type()}, Class1= n1.As<Class1>(), Class2= n2.As<Class2>()})
.Results;
然后您可以遍历结果。如果只有一个结果是预期的 'results' 数组
中的第一项这取决于 startNodeId
的含义 - 如果您指的是 Neo4j
ID,那么您将需要使用 Relationship<T>
class :
client.Cypher
.Match("(n1)-[r]-(n2)")
//Your where stuff here.
.Return(r => r.As<RelationshipInstance<string>());
T
应该是你在关系上设置的类型,但如果你没有,就用object
,你会需要使用Relationship<T>
类型,不能使用非通用版本。
如果 startNodeId
是类型上的 属性,那么您可以执行 r => r.As<YourType>()
或 r => r.As<Relationship<YourType>>()
。
作为旁注,您可以使用 Neo4jClient
的能力来解析参数并保存一些代码(同时使其 更多 编译安全)关于您的 Where
条款。
我会把你的代码写成:
var query = client.Cypher
.Match("(n1)-[r]-[n2]")
.Where((NodeType n1) => n1.NodeId == startNodeId)
.AndWhere((NodeType n2) => n2.NodeId == endNodeId)
.Return(r => new { Edge = r.As<RelationshipInstance<object>>(), Type = r.Type()});
自动解析参数