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

Neo4jClient如何返回动态图的所有节点、关系和参数,neo4j,neo4jclient,Neo4j,Neo4jclient,我正在构建一个应用程序,其中节点标签、参数和关系将由我的用户设置,因此某一层之后的节点、rel和prop将是完全动态和不可预测的。我的问题是如何运行下面的查询,并将结果映射到某种可以用于可视化重建图形的列表。使用neo4jClient 我直接在Neo4j浏览器中使用的查询非常有效 Match(a:User),(b:Work)-->(n) Where a.UserId = 'xxxx' AND b.Name = 'CompanyA' Return b, n 在c#中,我有这个,但它是

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

我直接在Neo4j浏览器中使用的查询非常有效

Match(a:User),(b:Work)-->(n) Where a.UserId = 
'xxxx' AND  b.Name = 'CompanyA' Return b, n 
在c#中,我有这个,但它是我被卡住的返回部分

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

有什么想法吗

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

您的最佳选择是与此问题的答案相同(使用
dynamic
):

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

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));
}
var query=client.Cypher
.Match(“(a:用户),(b:工作)-->(n)”)
.Where(“a.UserId={userIdParam}”)
.AndWhere(“b.Name={bNameParam}”)
.WithParams(新){
userIdParam=userId,
bNameParam=名称
})
.返回((a,n)=>新建{
A=A.As(),
N=N.As()
});
var results=query.results.ToList();
var nNodes=新列表();
foreach(结果中的var结果)
{
Add(JsonConvert.DeserializeObject(result.N.Data));
}

n节点
将包含一组
动态
对象,您可以使用这些对象做您想做的事情

我不知道您是否正在这样做,但您永远不应该将用户提供给您的值连接到查询字符串中,因为您会受到注入攻击(用户可以编写密码并对数据库执行任何操作)。顺便说一句,解决方案是使用Neo4j参数。谢谢Brian,我应该在我的所有代码中使用最佳实践,参数在这里是必须的。谢谢Chris!我刚刚实现了你的解决方案,它如我所希望的那样工作。只是为了完成这个。我也对获得这种关系感兴趣。我研究了如何获得关系类型。通过添加(a)-[r]->(b),然后在.Return中添加r=r.Type()。我离这里的一切只差一步了。如何从关系中获取数据?它们也可能是动态的。在我的头顶上-类似于:
.Return(r=>r.As()
我不是100%确定,而且我也没有靠近一台计算机进行检查:/如果这不起作用,请让我知道,当我靠近一台计算机时我会看到。嗯。这不太起作用。所以
.ReturnInstance()
是我想得到的。但是,当我使用
ReturnInstance
时,这很有用,它为我提供了从开始节点到结束节点的关系方向。但是数据作为对象返回,我似乎无法从中获取有意义的字符串。