{"SyntaxException:无效输入'{':需要一个标识符字符,空格

{"SyntaxException: Invalid input '{': expected an identifier character, whitespace

VB.NET 加载数千个节点并在它们之间建立关系的程序。我正在使用 Neo4J C# 客户端(版本 1.1.0.8)

其中一个命令是

TheConnection.GraphClient.Cypher.Match(
    "(user1:StartingPoint)",
    "(user2:Committee)"
).Where(
    Function(user1 As StartingPoint)
        user1.Id = KnowsID
).AndWhere(
    Function(user2 As Committee)
        user2.Id = KnownID
).Create(
    "user1-[r: Knows ]->user2"
).ExecuteWithoutResults()

出于各种业务逻辑原因,我想通过 FECIDNumber(它实际上是一个字符串,例如 'C00530767')而不是 ID 来匹配节点。所以我改变了

  1. 从长整型到字符串的已知 ID
  2. user2.Id = 已知ID

这给了我以下查询

TheConnection.GraphClient.Cypher.Match(
    "(user1:StartingPoint)",
    "(user2:Committee)"
).Where(
    Function(user1 As StartingPoint)
        user1.Id = KnowsID
).AndWhere(
    Function(user2 As Committee) user2.FECIDNumber = KnownID
).Create(
    "user1-[r: Knows ]->user2"
).ExecuteWithoutResults()

执行时抛出

{"SyntaxException: Invalid input '{':expected an identifier character, whitespace, '?', '!', '.', node labels, '[', ""=~"", IN, STARTS, ENDS, CONTAINS, IS, '^', '*', '/', '%', '+', '-', '=', ""<>"", ""!="", '<', '>', ""<="", "">="", AND, XOR, OR or ')' (line 3, column 23 (offset: 95))" & vbLf & """AND (user2.FECIDNumber{p1}{p2} = {p3})" & vbCr & """" & vbLf & "                       ^"}

当我进入 Neo4J 浏览器并且 运行

MATCH (user:Committee) WHERE user.FECIDNumber = "C00530766" RETURN user

它 returns 预期的节点。

我认为错误的重要部分似乎是

(line 3, column 23 (offset: 95))
  " & vbLf & """AND (user2.FECIDNumber{p1}{p2} = {p3})" & vbCr & """" & vbLf & " 

看起来 Neo4J C# 客户端正在抛出第二个参数 {p2},但这只是一个猜测。

有什么建议吗?

编辑 1

(我不知道我什至可以提取原始查询文本)

它正在返回

MATCH (user1:StartingPoint), (user2:Committee)
WHERE (user1.Id = 1)
AND (user2.FECIDNumber"C00530766"false = 0)
CREATE user1-[r: Knows ]->user2

显然问题是

user2.FECIDNumber = KnownID).Create("user1-[r: Knows ]->user2")

以某种方式生成

user2.FECIDNumber"C00530766"false = 0

想法?我应该使用不同的语法吗?我需要将 FECIDNumber 转换为其他类型吗?

编辑 2

相同的代码现在生成

MATCH (user1:StartingPoint), (user2:Committee)
WHERE (user1.Id = 1)
AND (user2.FECIDNumber = "C00530766")
CREATE user1-[r: Knows ]->user2 

它创建了预期的关系。

获胜者......

我已经发布了一个版本 (1.1.0.26),它应该可以为您解决这个问题,Nuget 需要几分钟时间来为它编制索引,所以从发布后给它 1/2 小时左右的时间...

告诉我!