2013-06-24 2 views
0

Мои Cypher выглядит следующим образом:Как получить список узлов из рассчитанного кратчайшего пути?

START source=node(16822), target=node(12449) 
MATCH p = allShortestPaths(source-[*]-target) 
return p 

И я хочу написать эквивалент C# код для этого. Это то, к чему я пришел до сих пор

var query = client.Cypher 
.Start(new { source = sourceNode.Reference, target = targetNode.Reference }) 
.Match("p = allShortestPaths(source-[*]-target)") 
.Return<Node<Data>>("x"); 

Где Data - класс, который имеет свойство строки (идентификатор строки).

Что мне следует положить вместо x, чтобы получить мой результат в виде списка конкатенированных идентификаторов, который содержит путь.

+1

В вас шифровальщика запросе, вы можете попробовать это 'Start Source = узел (16822) , target = node (12449) MATCH p = allShortestPaths (source- [r] -target) источник возврата, r, target' –

+0

нет, он выбрасывает исключение, он ожидает, что x будет иметь тип Node . Я хочу, чтобы он имел тип IEnumerable , который представляет узлы, которые содержат пути –

ответ

0

Хороший старый способ выполнения запроса был последним средством, которое я использовал

CypherQuery query1 = new CypherQuery(@"START m=node(" + sourceNode.Reference.Id.ToString() + "),  n=node(" + targetNode.Reference.Id.ToString() + @")             
               match p = allshortestpaths(m-[*]-n) 
               return distinct Extract(x in NODES(p): x.NodeId) as paths", paramCollection, CypherResultMode.Set); 
      var paths = ((IRawGraphClient)client).ExecuteGetCypherResults<List<string>>(query1); 
1

Cypher 2,0

START source=node(16822), target=node(12449) 
MATCH p = allShortestPaths(source-[*]-target) 
return nodes(p)