繁体   English   中英

C#中的Neo4j标量函数

[英]Neo4j Scalar functions in c#

在Neo4j中,我们可以执行以下操作: startNode(relationship), endNode(relationship) ,它将根据给定的关系为我们提供节点的起点和终点。

我的示例查询是这样的:

match p=(n1 {Identifier:<id>})-[:r1|r2*2]-(n2) unwind relationships(p) as rel return distinct startNode(rel) as n1, type(rel), endNode(rel) as n2

所以基本上它是一个可变长度的关系,我可以得到类型以及每种关系的开始和结束节点。

如果我不指定startNode或endNode,我将获得实际上未相互连接的额外节点。

这在neo4j cypher中工作得很好,但是我不知道如何在c#中执行startNode和endNode(标量函数)。

目前我有这个:

 var data = client.Cypher.Match("(n1)")
            .Where((Node n1) => n1.Identifier == identifier)
            .OptionalMatch("p=(n1)-[:r1|r1*2"]-(n2)")
            .Unwind("relationships(p)", "rel")
            .ReturnDistinct((n1, rel, n2) => new
            {
                startNode = n1.As<Node<string>>(),
                endNode = n2.As<Node<string>>(),
                relationship = rel.As<RelationshipInstance<object>>()
            }).Results;

不是在执行startNode和endNode函数,所以我得到了实际上彼此不连接的额外节点关系

关于如何在C#neo4j客户端中实现startNode和endNode功能的任何想法?

您需要使用Return.As作为Neo4jClient ,下面的查询将与您的原始Cypher匹配(包括在C#版本中使用的Optional ):

var query = client.Cypher.Match("(n1)")
           .Where((Node n1) => n1.Identifier == identifier)
           .OptionalMatch("p=(n1)-[:r1|r2*..2]->(n2)")
           .Unwind("relationships(p)", "rel")
           .ReturnDistinct((n1, rel, n2) => new
           {
               startNode = Return.As<Node<string>>("startNode(rel)"),
               endNode = Return.As<Node<string>>("endNode(rel)"),
               relationship = Return.As<string>("type(rel)")
           });

Return.As允许您调用所需的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM