Neo4jClient 我如何 return 动态图的所有节点、关系和参数

Neo4jClient How can I return all nodes, relationships and parameters for a dynamic graph

我正在构建一个应用程序,其中节点标签、参数和关系将由我的用户设置,因此某一层之后的节点、rel 和 prop 将完全动态且不可预测。我的问题是如何 运行 以下查询并将结果映射到某种可用于可视化重建图形的列表。使用 neo4jClient.

我直接使用 Neo4j 浏览器的查询效果很好

Match(a:User),(b:Work)-->(n) Where a.UserId = 
'xxxx' AND  b.Name = 'CompanyA' Return b, n 

在 c# 中我有这个,但它是我坚持的 return 部分。

 client.Cypher.Match("(a:User), (b:Work) --> (n)")
                .Where("(a.UserId = '" + userId + "')").AndWhere("(b.Name = name"
.Return((a,n)).Results;

有什么想法吗?

Neo4jClient 无法直接帮助您,问题(从 C# 的角度来看)是客户端试图将结果反序列化为具体的 C# 类型,而您没有提供任何...

你最好的选择是按照这个问题的答案做同样的事情(使用 dynamic):Casting nodes of an unknown type

所以,你最终会得到这样的结果:

var query = client.Cypher
    .Match("(a:User), (b:Work) --> (n)")
    .Where("a.UserId = {userIdParam}")
    .AndWhere("b.Name = {bNameParam}")
    .WithParams( new {
        userIdParam = userId,
        bNameParam = name
    })
    .Return((a,n) => new {
        A = a.As<User>(),
        N = n.As<Node<string>>()
    });

var results = query.Results.ToList();
var nNodes = new List<dynamic>();
foreach(var result in results)
{
    nNodes.Add(JsonConvert.DeserializeObject<dynamic>(result.N.Data));
}

nNodes 将包含一个 dynamic 对象的集合,您可以使用这些对象做您想做的事。