2016-04-25 5 views
0

Ich versuche mit Neo4j in .Net mit Neo4jClient. Ich versuche, den besten Weg zu finden, den folgenden konkreten C# -Klassen zu füllen:Zurückgeben eines Knotens und seiner Beziehungen und verbundenen Knoten in eine konkrete Klasse mit Neo4jClient

public class Person 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

public class PersonData 
{ 
    public Person Person { get; set; } 
    public List<Relation> Relations { get; set; } 
    public List<string> Labels { get; set; } 
} 

public class Relation 
{ 
    public Person Relative {get; set;} 
    public string Relationship { get; set; } 
} 

ich habe derzeit folgendes Grunddiagrammmodell:

(p:Person{ id: 1, name: 'Fred', age: 42})-[r:PARENT_OF]->(c:Person{ id: 2, name: 'Sarah', age: 8}) 

auch mit anderen Beziehungstypen, z.B. VERHEIRATET MIT.

Ich habe derzeit die folgende Abfrage, und ich möchte einen bestimmten Personenknoten erhalten, und es ist Beziehungen (dh die zugehörigen Personenknoten und eine Zeichenfolge, was der Beziehungstyp ist, könnte der Beziehungstyp oder ein Wert sein die Beziehung), um PersonData zu füllen. Ich kann momentan Person leicht bevölkern, aber ich weiß nicht, wie ich Beziehungen bevölkern kann.

var data = client.Cypher 
      .Match("(p:Person)-[r*1..1]->(per:Person)") 
      .Where((Person p) => p.Id == 3) 
      .Return((p, per) => new PersonData 
      { 
       Person = p.As<Person>() 
      }) 
      .Results; 

Ist diese Population von Personendaten etwas werde ich außerhalb der Abfrage zu tun haben, oder es kann in der return-Anweisung geschehen?

Ich habe auch das zusätzliche Problem, dass diese Abfrage den Knoten mit ID 3 zweimal zurückgibt, und ich weiß nicht warum.

Vielen Dank.

Antwort

1

Dies funktioniert mit Ihren Klassen - solange man List<Person>-IEnumerable

ändern
var query = gc.Cypher.Match("(p:Person {Id:2})") 
     .OptionalMatch("(p)-[r]->(p2:Person)") 
     .With("p, {Relationship: type(r), Relative: p2} as relations") 
     .Return((p, relations) => new PersonData 
     { 
      Person = p.As<Person>(), 
      Relations = relations.CollectAs<Relation>() 
     }); 
+0

Dank @ Chris, groß war man auf der Graph Connect zu sehen :) – tekiegirl

Verwandte Themen