【问题标题】:Variable Name to be used for building a relationship in neo4j用于在 Neo4j 中建立关系的变量名
【发布时间】:2014-07-23 22:45:32
【问题描述】:

在下面的代码 sn-p 中,我需要使用变量中的内容创建一个关系。

在代码 sn-p 中,sRelationName 是一个变量,但正如预期的那样,由于“:”符号,所创建的关系被创建为“:sRelationName”。

关于如何根据变量的内容创建关系的任何想法

client.Cypher
    .Match("(en1:Entity)", "(en2:Entity)")
    .Where((Entity en1) => en1.EntityName == sParentEntity)
    .AndWhere((Entity en2) => en2.EntityName == sChildEntity)
    .CreateUnique("en1-[:sRelationName]->en2")
    .ExecuteWithoutResults();

提前谢谢..

【问题讨论】:

    标签: c# neo4j neo4jclient


    【解决方案1】:

    Cypher 不接受关系类型作为查询参数。这应该是Neo4jClient 库提供的功能,但由于缺少它,您必须自己在逻辑代码中执行此操作。为此,您可以使用字符串连接或String.Format:

    .CreateUnique(String.Format("en1-[:{0}]->en2", sRelationName))
    

    这当然是一个简单的例子,所以请记住,如果你的表达式中有 Json 括号,那么你必须将它们转义(参见this question)才能像这样使用String.Format

    .CreateUnique(
        String.Format(
            "en1-[:{0} {{ category: {{category_name}} }}]->en2",
            sRelationName
        )
    )
    

    请记住不要将用户输入用作sRelationName 变量的值。否则如果你不逃避它就会有注入漏洞。

    【讨论】:

    • 非常感谢!!那行得通。当然,我不会对变量使用用户输入。它更多地描述了基于应用程序元数据的多个关系。