我最近开始使用Neo4JClient进行.NET集成,并且(最终)想出了大部分内容。但是,这个让我难过。
我有兴趣从Cypher查询中获取路径,最好是在POCO对象中,这样我就可以在前端处理这些查询。
所以我的问题基本上是如何在Neo4JClient中执行此操作?如果我不能,那么其他任何Neo4J .NET客户端是否都支持这个?
示例密码查询:
start n = node:idx(id="{id}")
MATCH p=(n)-[:RELATED_TO*0..3]-()
RETURN p;
所以,我希望特定节点周围的所有节点都具有传入和传出关系,深度为3.还有另一种类型的查询,但它使用withs,我需要找出Neo4JClient是否支持(另一个)但问题是)。
到目前为止,我一直在使用带有开放和封闭集的Gremlin来填充自定义对象,并提供有关其子关系的信息。它绝不是有效的,因此我想以某种方式用路径来做这件事。有问题的customobject看起来有点像这样。
public class ConnectedNode : BaseNode
{
public List<NodeRelation> RelatedNodes { get; set; }
public ConnectedNode()
{
RelatedNodes = new List<NodeRelation>();
}
}
public class NodeRelation
{
// ... various properties for relationship payload type stuff
public ConnectedNode RelatedNode { get; set; }
public RelationshipDirection Direction { get; set; }
}
我很高兴能够在我正在寻找的路径上回收节点和关系数据,只要它有效。
答案 0 :(得分:1)
你试过了吗?
ICypherFluentQueryReturned<PathsResult> query
= graphClient.Cypher
.StartWithNodeIndexLookup("n", "idx", "id", id)
.Match("p=(n)-[:RELATED_TO*0..2]-()")
.Return<PathsResult>("p");
IEnumerable<PathsResult> res = query.Results;
res
中的每个结果应该是您所追求的结果吗?
答案 1 :(得分:1)
我最终找到了这个问题的答案,并在这个问题上写了blog post。但是,你不必阅读它的主旨的帖子......
首先,使用EXTRACT函数提取路径的节点和关系。这将为您提供2列结果。将此2列结果包含在您自己选择的POCO中,该POCO采用节点列表和RelationshipInstances。然后使用Projection将查询检索到此类对象中。瞧!
希望这有帮助,它帮助了我。
答案 2 :(得分:0)
我从Chris Skardon的code(http://geekswithblogs.net/cskardon/archive/2013/07/23/neo4jclient-ndash-getting-path-results.aspx)开始,刚开始删除关系类,看它是否有效。我喜欢Chris的解决方案,因为它一次性返回节点属性以及关系(包括TypeKey)。事实证明,您不需要创建任何新类。
var queryResults = graphClient.Cypher
.Match("p=(n)-[:RELATED_TO|OTHER_RELATION*0..2]-()")
.Return(p => new
{
Nodes = Return.As<IEnumerable<Node<**YOUR_NODE_CLASS**>>>("nodes(p)"),
Relationships = Return.As<IEnumerable<RelationshipInstance<Dictionary<string,string>>>>("rels(p)")
})
.Results;
resultsPath.Dump();//Use LINQPad to see the results
我使用的关系对象是Dictionary<string,string>
(您可以使用它代替**YOUR_NODE_CLASS**
) - 对我来说,RelationshipReference.Data
字段中没有数据,但我认为如果我的关系有属性,那就是。