我已经使用下面的CYPHER客户端(C#)成功运行了最短路径算法。
但是,由于另一个应用程序添加了其他属性,我正努力返回节点和关系的所有属性,并且我想避免为结果创建一个全新的类;使它充满活力。
另一个应用程序读取一个XML文件,可以在其中添加其他标签,它在解析XML时创建一个dynamicObject并将其上传到图形数据库。例如,某人可能将“速度”添加到城镇的“道路”元素或人口计数中。
我试图通过反射来获取节点和node.Data下的所有属性,但是它没有列出任何内容。如果我创建一个类,则它确实会获取值,但是会更动态。
有什么想法吗?谢谢。
下面的代码获取所有节点和边,但不获取其属性。如果我将“ RelationshipInstance”替换为带有Road的类,则它将获取Length,但不会获取其中的任何其他值。
var query = graphClient.Cypher
.Match($"p=(c:Location {{ Name: \"{start}\"}})-[:Road*..10]->(b:Location {{ Name: \"{end}\"}})")
.Return((p) => new
{
Nodes = Return.As<IEnumerable<Node<object>>>("nodes(p)"),
Relationships = Return.As<IEnumerable<RelationshipInstance<object>>>("rels(p)"),
Distance = Return.As<double>("reduce(km = 0, r in relationships(p) | km + r.Length)")
})
.OrderBy("Distance ASC")
.Limit(1).Results;
public class Location {
public string Name {get;set;}
public long Population {get;set;}
}
public class Town : Location {
public long PropA {get;set;}
}
public class City : Location {
public string PropA {get;set;}
public long PropB {get;set;}
}
public class Road {
public double Length {get;set;}
}