Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Neo4jClient在Neo4j中通过可变长度关系获取关系节点_C#_.net_Neo4j_Neo4jclient - Fatal编程技术网

C# 使用Neo4jClient在Neo4j中通过可变长度关系获取关系节点

C# 使用Neo4jClient在Neo4j中通过可变长度关系获取关系节点,c#,.net,neo4j,neo4jclient,C#,.net,Neo4j,Neo4jclient,我使用Neo4jClient,我想通过可变长度关系(n:Users{id:1})-[r:FOLLOW*1..4](m:Users)返回r如何获取具有属性关系的节点,例如: Node[0]{id:1,name:"Oliver Stone"} Node[1]{id:2,name:"Charlie Sheen"} Node[2]{id:3,name:"Martin Sheen"} Node[3]{id:4,name:"TheAmericanPresident"} 我应该知道,节点[0]和节点[2]

我使用Neo4jClient,我想通过可变长度关系
(n:Users{id:1})-[r:FOLLOW*1..4](m:Users)返回r
如何获取具有属性关系的节点,例如:

Node[0]{id:1,name:"Oliver Stone"}
Node[1]{id:2,name:"Charlie Sheen"}
Node[2]{id:3,name:"Martin Sheen"}
Node[3]{id:4,name:"TheAmericanPresident"} 

我应该知道,节点[0]和节点[2]之间的属性关系是什么?(属性的意思是“FOLLOW”或“IGNORE”)

首先,如果您正在使用
[r:FOLLOW*1..4]
您已经知道
类型键,因为它在您的代码中,如果您想获得
[r*1..4]
类型键,那么您可以使用以下代码,主要的变化是我们将
R
恢复为
IEnumerable
,而不仅仅是直接的
RelationshipInstance

运行上述代码将得到以下输出:

(1)-[:IGNORE]-(3)
(1)-[:FOLLOW]-(3)
您并不真正知道顺序是什么,并且存在冲突类型。假设您关注的是实际路线,而不仅仅是名称(我意识到情况可能并非如此),那么我们需要对查询进行更多的更改

如果查看要返回的
RelationshipInstance
,您将看到它有两个属性:
EndNodeReference
StartNodeReference
,您还将注意到它们的
Id
属性与对象中的任何Id都没有关系。在本例中,
Id
与实际的Neo4j Id相关。要从中获取有意义的数据,我们需要获取该Id,这意味着使用
节点
。理想情况下,我们不想这样做,但我不知道目前有任何其他方法可以获得路线

var query = Client.Cypher
    .Match("(n:User)-[r*1..4]-(m:User)")
    .Where((UserEntity n) => n.Id == 1)
    .Return((n, r, m) => new
    {
        N = n.As<Node<UserEntity>>(), //<-- Node<T>
        M = m.As<Node<UserEntity>>(), //<-- Node<T>
        R = r.As<IEnumerable<RelationshipInstance<object>>>()
    });

foreach (var item in res.ToList())
    foreach (var relationshipInstance in item.R)
        Console.WriteLine("({0})-[:{1}]-({2})", item.N.Data.Id, relationshipInstance.TypeKey, item.M.Data.Id);
var query=Client.Cypher
.Match(“(n:User)-[r*1..4]-(m:User)”)
.Where((用户实体n)=>n.Id==1)
.返回((n,r,m)=>新
{

N=N.As(),//
TData
是关系的任何POCO,如果没有,则只需使用
object
NodeId
StartNodeReference
EndNodeReference
(1)-[:IGNORE]-(3)
(1)-[:FOLLOW]-(3)
var query = Client.Cypher
    .Match("(n:User)-[r*1..4]-(m:User)")
    .Where((UserEntity n) => n.Id == 1)
    .Return((n, r, m) => new
    {
        N = n.As<Node<UserEntity>>(), //<-- Node<T>
        M = m.As<Node<UserEntity>>(), //<-- Node<T>
        R = r.As<IEnumerable<RelationshipInstance<object>>>()
    });

foreach (var item in res.ToList())
    foreach (var relationshipInstance in item.R)
        Console.WriteLine("({0})-[:{1}]-({2})", item.N.Data.Id, relationshipInstance.TypeKey, item.M.Data.Id);