簡體   English   中英

如何從Neo4J .NET客戶端返回整個節點及其所有屬性?

[英]How to return the whole node with all its properties from Neo4J .NET client?

我正在嘗試制作一個通用代碼,可以對連接到用戶的對象進行過濾。 這些對象可以是不同的類型,具有不同的屬性等。

基本上我想實現此方法:

public string GetRelatedObjects(string sourceObject, string userId){
  var resQuery = GraphDB.Cypher
    .Match("(src:" + sourceObject + ")--(usr:User { Id:{userId} })")
    .WithParam("userId", userId)
    .Return(src => src.As<object>());
  var result = await resQuery.ResultsAsync;

  return JsonConvert.SerializeObject(result);
}

問題是當我使用.As<object>()我得到一個空項目。

當我輸入一個具體類型時,例如.As<User>()我得到的結果是我期望的。 是否有辦法獲得Neo4JClient想要得到的東西,還是我必須以某種方式降低水平?

因此,Neo4jClient在后台使用Json.NET將來自Neo4j的輸出反序列化為您指定的類。 當您指定不具有屬性的object ,您將不會獲得任何屬性。 Neo4jClient和Json.NET都不知道您真正想要的是什么,因此您只能取回該object 現在,解決時間-您可以使用dynamic

public async Task<string> GetRelatedObjectsAsJson(string sourceObject, string userId)
{
    var resQuery = GraphDB.Cypher
        .Match(string.Format("(src:{0})--(usr:User {{ Id:{{userId}} }})", sourceObject))
        .WithParam("userId", userId)
        .Return(src => src.As<Node<string>>());
    var result = await resQuery.ResultsAsync;

    var output = result.Select(node => JsonConvert.DeserializeObject<dynamic>(node.Data)).ToList();
    return JsonConvert.SerializeObject(output);
}

我想這會得到您想要的,如果是您,我可能會返回Task<IEnumerable<dynamic>>而不是將其重新string化為string ,但是我不知道您想要將結果用於什么,所以也許不適當。

請參閱鑄造未知類型的節點以獲取更多信息。

您可以通過創建廣義節點類來返回具有其所有屬性的節點。

准確地說,可以通過

  • 創建通用的“ GenNode”類
  • 將結果轉換為GenNode

C#類別:

public class GenNode
{
    public long Id { get; set; }
    public IEnumerable<String> Labels { get; set; }
    public Dictionary<String, String> Properties { get; set; }
}

改寫方法:

public IEnumerable<GenNode> GetRelatedObjects(string sourceObject, string userId){
var resQuery = GraphDB.Cypher
    .Match("(src:" + sourceObject + ")--(usr:User { Id:{userId} })")
    .WithParam("userId", userId)
    .With("src, properties(src) as prop")
    .Return((src,prop) => new GenNode
    {
      Id = src.Id(),
      Labels = src.Labels(),
      Properties = prop.As<Dictionary<Object,Object>>()
    });

  var result = await resQuery.ResultsAsync;

  return result;
}

注意返回類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM