簡體   English   中英

如何使用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()});

通過這種方式,我只能獲取關系的LabelProperties 。但是我也想獲取關系的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM