我是neo4jclient的新手,请考虑以下情况
节点:
name : Person A
age : 25
类:
public class Person
{
public string name { get; set; }
}
使用以下查询
var persons = client
.Cypher
.Start("n", "node(*)")
.Return<Node<Person>>("n")
.Results
.Select(un => un.Data);
上述查询已成功执行,但在Person
对象中我只有'name'属性,而我没有'age'属性。我的问题是:如何获取未在Person类中定义的属性的属性名称及其值。
是否可以获取所有属性名称和值?
答案 0 :(得分:1)
在我看来,您希望获取未在Person类中定义的属性。我不相信有一种方法可以返回不在你班级中的属性。 Neo4jClient反序列化节点信息并将其放入您指定的对象类型中。为简单起见,我只是更新您的Person类,以反映添加到Neo4j中“Person”节点的任何新属性。
从节点中抓取所有属性名称和值将对Neo4jClient进行一些修改并查询Neo4j的REST API。
答案 1 :(得分:1)
我同意@ cameron-tinker,我认为没有办法直接从图形数据库中获取属性,没有。
解决此问题的最佳方法可能是让一个类简单地将节点的信息反序列化,例如PersonNode。
public class PersonNode
{
public string Name { get; set; }
public int Age { get; set; }
}
然后,也许你可以在你的person类中有一个构造函数,它接受一个person节点来填充它。
public Person(PersonNode node)
{
this.name = node.Name;
}
然后你调整你的密码查询以拉出PersonNodes,如下所示:
var persons = ((IRawGraphClient)client).ExecuteGetCypherResults<Node<PersonNode>>(
new CypherQuery("start n=node(*) return n;",
null,CypherResultMode.Set)) .Select(un => un.Data);
不是一个完全原创的答案,我真的只是在扩展Cameron的。但我希望这可以帮助您解决问题。