2016-04-25 15 views
0

Neo4jClientで.NetのNeo4jを使って試しています。私は、以下の具体的なC#クラスを移入するための最良の方法を見つけようとしています:例えば、他の関係タイプでNeo4jClientを使用してノードとその関係と接続ノードを具体的なクラスに戻します。

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

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; } 
} 

は、私は現在、次の基本的なグラフモデルを持っていますと結婚している。

私は現在、以下のクエリを持っています。特定の人物ノードを取得したいと思っています。それは関係人物ノードと関係タイプの文字列です。関係タイプや値は関係)、PersonDataを生成します。私は現在、Personに簡単にデータを入れることができますが、私はどのようにRelationsを作成するのか分かりません。

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; 

PersonDataのこの人口は、クエリの外で行う必要がありますか、それともreturn文で行うことができますか?

また、このクエリでid 3のノードが2回返されているという追加の問題があります。理由はわかりません。

多くのありがとうございます。

答えて

1

これはあなたのクラスで動作します - 限り、あなたはList<Person>からIEnumerable

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

おかげ@クリスに変更すると、グラフの接続時にお会いできてよかった:) – tekiegirl

関連する問題