我正在尝试使用Neo4jClient来运行Cypher语法:
UNWIND {apples} AS newApple
CREATE (a:Apple {newApple})
使用C#列表中的对象List<Apple> a
,其中对象可以是:
class Apple : Fruit
{
[JsonProperty(PropertyName = "Variety")]
public String Variety { get; set; }
}
我不想在代码周围的不同位置展开对象变量规范。
但是正在运行
graphClient.Cypher
.Unwind(a, "newApple")
.Create("(a: Apple {newApple})")
.ExecuteWithoutResults()
抛出:
Neo4jClient.NeoException:&#39; ParameterNotFoundException:期望一个名为newApple&#39;
的参数
将Create
行更改为
.Create("(a: Apple {Id: newApple.Id})")
似乎有效,因此找到了预期的参数newApple
。这里的问题是,如果我更改类的属性,我必须更改密码查询字符串中的直接依赖。
Unwind
中指定的标识符。答案 0 :(得分:1)
因为newApple
不再是参数,而是变量,而您使用的语法只能应用于外部参数。
对于变量可以这样使用:
WITH [{id: 1, name: 'appe1'}, {id: 2, name: 'apple2'}] as apples
UNWIND apples as newApple
CREATE (a:Apple) SET a = newApple
RETURN a
答案 1 :(得分:0)
基于Gabor的答案,对于可以像这样实现的C#neo4jclient(在评论和编辑中展开over here):
pickerView
graphClient.Cypher
.Unwind(apples, "newApple")
.Create("(a: Apple)")
.Set("a = newApple")
.ExecuteWithoutResults();
允许使用JsonAttribute属性设置整个对象,而不在cypher中指定显式参数。