使用neo4j客户端构建动态查询

时间:2016-03-15 08:42:53

标签: neo4j neo4jclient

我读了很多关于这个主题的问题,并创建了以下几乎动态的查询:

var resQuery = WebApiConfig.GraphClient.Cypher
                .Match("(movie:Movie {title:{title}})")
                .WithParam("title", title)
                .Return(() => new {
                    movie = Return.As<string>("movie.title")
                }).Results;

不幸的是,这并不是动态的,因为我在Return anonymous类型中声明了movie属性。

在所有示例中,我发现唯一的选择是在对象与节点属性匹配时返回节点, 喜欢:movie = Return.As<string>("movie.title")

我希望Return语句能够返回所有节点属性的键值对列表(它可以是任何表示形式,如JSON等),因为 我的节点是通用的,而不是每次都来自特定的对象类型。

可能吗?

1 个答案:

答案 0 :(得分:2)

您可以这样做:

var resQuery = WebApiConfig.GraphClient.Cypher
    .Match("(movie:Movie {title:{title}})")
    .WithParam("title", title)
    .Return(() => Return.As<Node<Dictionary<string,string>>>("movie"));

var results = resQuery.Results.Select(r => r.Data);
Console.WriteLine(results.First()["title"]);

或者,例如:

var resQuery = WebApiConfig.GraphClient.Cypher
    .Match("(movie:Movie {title:{title}})")
    .WithParam("title", title)
    .Return(() => Return.As<Node<string>>("movie"));

var results = resQuery.Results;
List<dynamic> nodes = results.Select(r => JsonConvert.DeserializeObject<dynamic>(r.Data)).ToList();
Console.WriteLine(nodes[0].title);