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

时间:2015-08-10 11:02:54

标签: neo4j neo4jclient

我正在构建一个应用程序,其中节点标签,参数和关系将由我的用户设置,因此在某个图层之后的nodes,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;

任何想法?

1 个答案:

答案 0 :(得分:2)

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个对象的集合,您可以使用它们执行所需的操作。