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

Build a dynamic query using neo4j client

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

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

不幸的是,这不是动态的,因为我在 Return 匿名类型中声明电影 属性。

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

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

这可能吗?

你可以这样做:

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);