0

我正在尝试编写一个程序来生成所有链接在一起的星期几列表。以(星期一)->(星期二)->(星期三)的形式...虽然我可以通过直接通过 Web 界面编写 Cypher 查询来做到这一点,但我似乎无法使用 GraphDatabase.Driver 在 C# 中以编程方式执行此操作. 创建第 1 天的查询似乎有效,但由于某种原因,我的第二个查询无效。这是代码

string[] days = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" };

using (var driver = GraphDatabase.Driver("bolt://localhost:7687", AuthTokens.Basic(<my_username>, <my_password>)))
        using (var session = driver.Session())
        {

            session.Run("CREATE (d1: Day {day: {Day1}}) ", new Dictionary<string, object> { { "Day1", days[0] }});

            for (int i = 1; i < days.Length-2; i++)
            {
                session.Run("" +
                    "Match (d :Day {day:'{day1} '}) " +
                    "WITH d " +
                    " CREATE (d)-[:before] -> (d2 :Day {day:'{day2}'}) ", new Dictionary<string, object> { { "day1", days[i-1] }, { "day2", days[i] } });
            }
        }
4

1 回答 1

0

您不应该在参数周围添加撇号。在您的第一个CREATE查询中,此规则被保留,但在第二个查询中,'{day1} '不应'{day2}'被撇号包围。

您还可以在单​​个 Cypher 命令中创建整个链表:

WITH ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] as days
UNWIND days AS day
CREATE (:Day {day: day})
WITH DISTINCT days
UNWIND range(0, length(days) - 2) AS i
MATCH (d1:Day {day: days[i]}), (d2:Day {day: days[i+1]})
CREATE (d1)-[:before]->(d2)

这首先为天创建节点(总共 7 个),然后遍历一组索引以创建关系 (6)。

于 2017-10-02T21:08:11.333 回答