2017-06-12 23 views
0

私はいくつかのデータをneo4jノードとして保存しています。このノードには、関連するC#クラスで記述されていないプロパティがいくつか存在するため、neo4jclientクエリが返されたときに自動的にクラスに戻されることはありません。neo4jclientを使用して特定のneo4jノードプロパティを取得するにはどうすればよいですか?

例として、このC#クラス:のNeo4jに格納されている

public class Node { 
    public string name; 
    public int number; 
    public CustomClass data; 
} 

、次neo4jclient流暢コードで取得:

var query = client.Cypher 
    .Match("(n:Node)") 
    .Return(n => n.As<Node>()) 
    .Results; 

は、名前と番号を持つノード・オブジェクトを移入しますが、 CustomClassオブジェクトへの参照をnullのままにします。

この問題を解決するために、CustomClassをJSON文字列としてシリアル化し、文字列プロパティとしてneo4jに格納しました。このJSONクラスを逆シリアル化するには、neo4jに格納されているノードからJSON文字列プロパティを取得する必要があります。

neo4jclientマニュアルは、次をお勧めします。

.Return(() => new { 
    JSONString = Return.As<string>("matchedNode.JSONProperties") 
}) 

ただし、これは無効なコードです。 JSONString =の後のReturnはそのコンテキストに存在しません。

回答を参照してください。

データベースからJSONPropeties文字列を取得するにはどうすればよいですか?

答えて

0

与えられたコードは、まったく同じように動作します。正しいneo4jclient参照を含める必要があります。この場合、

using Neo4jClient.Cypher; 

Returnは、もはや未定義ではありません。一致したすべての要素にアクセスする必要がある場合は、Allクラスもこの場所にあります。

あなたの答えにさらに
0

、脇

using Neo4jClient.Cypher

を追加することからあなたはまた、単にそのようなNodeプロパティを返すように選択できます

var query = client.Cypher 
    .Match("(n:Node)") 
    .Return(n => n.As<Node>().name) //<-- returning just the property 
    .Results; 
+0

クラスがで指定されている場合にのみ動作します.As <>コールには、neo4jノードフィールドと一致するフィールドがあります。 (あなたの例の "name"では)しかし、私の問題は、 "このノードには関連するC#クラスで記述されていないプロパティがいくつかある"ということでしたので、この答えは当てはまりません。 – slbelden

+0

私は 'Node 'を使い、 'dynamic'オブジェクトにキャストします –

関連する問題