2017-06-12 94 views
0

我有一些數據存儲爲neo4j節點。這個節點有一些屬性沒有被關聯的C#類描述,因此在neo4jclient查詢返回時不會自動映射回類。如何使用neo4jclient檢索特定的neo4j節點屬性?

作爲一個例子,這個C#類:

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

存儲在Neo4j的,然後用下面的neo4jclient流利代碼檢索到:

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

將填充與姓名和號碼節點對象,但保留CustomClass對象的空引用。

爲了解決這個問題,我將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

只有在指定的類此作品。<>呼叫有一個匹配neo4j節點字段的字段。 (在你的「名稱」例子中)。但是我說的問題是「這個節點有一些屬性沒有被關聯的C#類描述......」,所以這個答案是不適用的。 – slbelden

+0

然後我會使用'節點'並投射到一個'dynamic'對象 –