使用.net在单个neo4j查询中执行匹配和创建

时间:2017-10-02 20:50:35

标签: c# .net neo4j cypher neo4j-dotnet-driver

我正在尝试编写一个程序,该程序生成一个星期几的列表,这些列表全部链接在一起。在表格(星期一) - > (星期二) - > (星期三)......虽然我可以通过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] } });
            }
        }

1 个答案:

答案 0 :(得分: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)。