Neo4j Cypher具有属性的最短路径

时间:2019-10-15 12:53:24

标签: c# neo4j cypher

我已经使用下面的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;}

}

0 个答案:

没有答案