Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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# 具有性质的Neo4j-Cypher最短路径_C#_Neo4j_Cypher - Fatal编程技术网

C# 具有性质的Neo4j-Cypher最短路径

C# 具有性质的Neo4j-Cypher最短路径,c#,neo4j,cypher,C#,Neo4j,Cypher,我已经使用下面的CYPHER客户端(C#)成功运行了一个最短路径算法 但是,当另一个应用程序添加其他属性时,我很难返回节点和关系的所有属性,我希望避免为结果创建一个全新的类;让它充满活力 另一个应用程序读取可以添加其他标记的XML文件,在解析XML时创建dynamicObject并将其上载到图形数据库中。例如,有人可能会将速度添加到某个城镇的道路要素或人口计数中 我尝试了反射来获取nodes和node.Data下的所有属性,但它没有列出任何属性。如果我创建一个类,那么它确实会得到值,但它会更具动

我已经使用下面的CYPHER客户端(C#)成功运行了一个最短路径算法

但是,当另一个应用程序添加其他属性时,我很难返回节点和关系的所有属性,我希望避免为结果创建一个全新的类;让它充满活力

另一个应用程序读取可以添加其他标记的XML文件,在解析XML时创建dynamicObject并将其上载到图形数据库中。例如,有人可能会将速度添加到某个城镇的道路要素或人口计数中

我尝试了反射来获取nodes和node.Data下的所有属性,但它没有列出任何属性。如果我创建一个类,那么它确实会得到值,但它会更具动态性

有什么想法吗?谢谢

下面的代码获取所有节点和边,但不获取它们的属性。如果我将“RelationshipInstance”替换为一个带有Road的类,那么它将得到长度,但不会得到可能存在的任何其他长度

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;}

}
var query=graphClient.Cypher
.Match($“p=(c:Location{{{Name:\{start}\'})-[:Road*.10]->(b:Location{{Name:\{end}\'}]))
.返回((p)=>新建
{
Nodes=Return.As(“节点(p)”,
关系=返回.As(“rels(p)”,
距离=返回.As(“减少(km=0,关系中的r(p)| km+r.Length)”)
})
.OrderBy(“距离ASC”)
.限值(1).结果;
公共类位置{
公共字符串名称{get;set;}
公共长填充{get;set;}
}
公营城市:位置{
公共长PropA{get;set;}
}
公营城市:位置{
公共字符串PropA{get;set;}
公共长PropB{get;set;}
}
公共道路{
公共双长度{get;set;}
}

您所说的“另一个应用程序添加其他属性”是什么意思?上面的代码做什么?它有用吗?为什么反思没有帮助?显示错误?也许你可以试试JSON stringfy之类的东西。我在第一篇文章中添加了一些文本。反射不允许我访问任何属性,它甚至不显示任何属性。没有错误。您所说的“另一个应用程序添加其他属性”是什么意思?上面的代码做什么?它有用吗?为什么反思没有帮助?显示错误?也许你可以试试JSON stringfy之类的东西。我在第一篇文章中添加了一些文本。反射不允许我访问任何属性,它甚至不显示任何属性。没有错误。