2017-11-15 4 views
0
public IEnumerable<EdVeObj> Parse(string word) 
    { 
     var res = graphClient.Cypher.OptionalMatch($"(a{{name:'{word}'}})-[r]->(b)") 
     .Return((a, r, b) => new EdVeObj{RelUp = r.As<Edge>(), Target = b.<Vertex>()}).Results;    
     return res; 
    } 
    public class EdVeObj 
    {     
     public Edge RelUp { get; set; } 
     public Vertex Target { get; set; } 
    } 

Ich brauche alle ausgehenden Kanten zu durchlaufen und eine Sammlung von Objekten erhalten: den Rand und den Scheitelpunkt, zu dem es kommt. Sagen Sie mir bitte: Wie führt man diese Iteration durch?Wie eine Sammlung von Objekten erhalten <Rand, Vertex-> Neo4jClient .NET Cypher vs. C#

+0

Die 'Parse()' Methode gibt Ihnen und [ 'IEnumerable'] (https://msdn.microsoft.com/en-us/library/system.collections.ienumerable(v=vs.110).aspx), so sollten Sie einfach das Ergebnis bekommen und darauf iterieren - zB mit einer foreach-Schleife. –

Antwort

0

Die Frage ist nicht super klar, aber wie Gabor erwähnt hat, wenn Sie durch Ihre Ergebnisse iterieren suchen, verwenden Sie foreach, das heißt:

var results = Parse("word"); 
foreach(var ev in results){ 
    //Do something with ev 
} 

Sie ebenso eine for Schleife verwenden könnte - aber Sie müssen die Ergebnisse .ToList():

var results = Parse("word").ToList(); 
for(int i = 0; i < results.Count; i++){ 
    //Do something with results[i] 
} 

Ihre cypher würde von einem bisschen Stimmung profitieren, zunächst einmal - es gibt keine Notwendigkeit OptionalMatch zu verwenden - Sie müssen die Ergebnisse existieren, wenn da nichts ist dann würde es sowieso nichts zurückgeben. Auch - Sie sollten wirklich eine label von einer Vielzahl verwenden, zumindest auf dem a Knoten. Sie sollten auch parameters verwenden, um mehr Leistung vom Server zu erhalten.

Ich würde Ihren Code ändern:

public IEnumerable<EdVeObj> Parse(string word) 
{ 
    var res = graphClient.Cypher 
     .Match("(:YOUR_LABEL_HERE {name:$word})-[r]->(b)") 
     .WithParam("word", word) 
     .Return((r, b) => new EdVeObj 
      { 
       RelUp = r.As<Edge>(), 
       Target = b.<Vertex>() 
      }) 
     .Results;    

    return res; 
} 

Auf jeder großen Diagramm, das wird ziemlich lange laufen:/

Verwandte Themen