[英]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。 谁能帮助我?
汤姆
如果您知道要转换为的类,则可以使用:
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;
然后,您可以遍历结果。 如果仅预期一个结果,则它是“结果”数组中的第一项
这取决于startNodeId
含义-如果要表示Neo4j
Ids,则需要使用Relationship<T>
类:
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()});
自动解析参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.