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