Neo4j Cypher Кратчайший путь со свойствами - PullRequest
1 голос
/ 15 октября 2019

Я успешно запустил алгоритм кратчайшего пути, используя клиент CYPHER (C #) ниже.

Однако я изо всех сил пытаюсь вернуть все свойства для узлов и отношений, поскольку другое приложение добавляет другие свойства, и я хочу избежать создания совершенно нового класса для результатов;делая его динамическим.

Другое приложение считывает файл XML, в который могут быть добавлены теги other, создает динамический объект при синтаксическом анализе XML и загружает его в базу данных графа. Например, кто-то может добавить скорость к элементу дороги или количеству населения для города.

Я попытался отразить, чтобы получить все свойства в узлах и узле. Данные, но они не перечислены. Если я создаю класс, то он получает значения, но он будет более динамичным.

Есть идеи? Спасибо.

Код ниже получает все узлы и ребра, но не их свойства. Если я заменю «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;}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...