Return 一个节点及其关系和连接的节点,使用 Neo4jClient 变成一个具体的 class
Return a node and it's relationships and connected nodes, into a concrete class using Neo4jClient
我正在尝试在 .Net 中使用 Neo4j 和 Neo4jClient。我正在尝试找到填充以下具体 C# 类:
的最佳方法
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class PersonData
{
public Person Person { get; set; }
public List<Relation> Relations { get; set; }
public List<string> Labels { get; set; }
}
public class Relation
{
public Person Relative {get; set;}
public string Relationship { get; set; }
}
我目前有以下基本图形模型:
(p:Person{ id: 1, name: 'Fred', age: 42})-[r:PARENT_OF]->(c:Person{ id: 2, name: 'Sarah', age: 8})
还有其他关系类型,例如MARRIED_TO.
我目前有以下查询,我想得到一个特定的人节点,它是关系(即相关的人节点和关系类型的字符串,可以是关系类型或值的关系),填充 PersonData。我目前可以轻松填充人,但我不知道如何填充关系。
var data = client.Cypher
.Match("(p:Person)-[r*1..1]->(per:Person)")
.Where((Person p) => p.Id == 3)
.Return((p, per) => new PersonData
{
Person = p.As<Person>()
})
.Results;
这个 PersonData 的填充是我必须在查询之外做的事情,还是可以在 return 语句中完成?
我还有一个问题,就是这个查询 return 对 id 为 3 的节点进行了两次查询,我不知道为什么。
非常感谢。
这适用于您的 类 - 只要您从 List<Person>
更改为 IEnumerable
var query = gc.Cypher.Match("(p:Person {Id:2})")
.OptionalMatch("(p)-[r]->(p2:Person)")
.With("p, {Relationship: type(r), Relative: p2} as relations")
.Return((p, relations) => new PersonData
{
Person = p.As<Person>(),
Relations = relations.CollectAs<Relation>()
});
我正在尝试在 .Net 中使用 Neo4j 和 Neo4jClient。我正在尝试找到填充以下具体 C# 类:
的最佳方法public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class PersonData
{
public Person Person { get; set; }
public List<Relation> Relations { get; set; }
public List<string> Labels { get; set; }
}
public class Relation
{
public Person Relative {get; set;}
public string Relationship { get; set; }
}
我目前有以下基本图形模型:
(p:Person{ id: 1, name: 'Fred', age: 42})-[r:PARENT_OF]->(c:Person{ id: 2, name: 'Sarah', age: 8})
还有其他关系类型,例如MARRIED_TO.
我目前有以下查询,我想得到一个特定的人节点,它是关系(即相关的人节点和关系类型的字符串,可以是关系类型或值的关系),填充 PersonData。我目前可以轻松填充人,但我不知道如何填充关系。
var data = client.Cypher
.Match("(p:Person)-[r*1..1]->(per:Person)")
.Where((Person p) => p.Id == 3)
.Return((p, per) => new PersonData
{
Person = p.As<Person>()
})
.Results;
这个 PersonData 的填充是我必须在查询之外做的事情,还是可以在 return 语句中完成?
我还有一个问题,就是这个查询 return 对 id 为 3 的节点进行了两次查询,我不知道为什么。
非常感谢。
这适用于您的 类 - 只要您从 List<Person>
更改为 IEnumerable
var query = gc.Cypher.Match("(p:Person {Id:2})")
.OptionalMatch("(p)-[r]->(p2:Person)")
.With("p, {Relationship: type(r), Relative: p2} as relations")
.Return((p, relations) => new PersonData
{
Person = p.As<Person>(),
Relations = relations.CollectAs<Relation>()
});