【问题标题】:Performing Match and Create in single neo4j query with .net使用 .net 在单个 neo4j 查询中执行匹配和创建
【发布时间】:2017-10-02 20:50:35
【问题描述】:

我正在尝试编写一个程序来生成所有链接在一起的星期几列表。以(星期一)->(星期二)->(星期三)的形式...虽然我可以通过直接通过 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] } });
            }
        }

【问题讨论】:

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


    【解决方案1】:

    您不应在参数周围添加撇号。在您的第一个 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)。

    【讨论】:

    • 非常感谢您的帮助
    猜你喜欢
    • 2015-11-25
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    相关资源
    最近更新 更多