Я успешно запустил алгоритм кратчайшего пути, используя клиент 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;}
}