我试图在使用Neo4j时传递一个带有单引号的变量,同时使用Neo4jClient,而且我似乎无法正确地获得字符转义。
当我用这个:
var Command = new UpdateCommand()
{
Name = "3 o'clock";
};我收到一个错误,说有一个语法错误。当我用这个:
var Command = new UpdateCommand()
{
Name = "3 o\\'clock ";
};它错误地用额外的转义字符存储变量名。
我的create节点非常简单,看起来是这样的,newUser对象有一个属性(名称),该属性由命令设置。
_client.Cypher
.Create("(u:User {user})")
.WithParams(new { user = newUser })
.ExecuteWithoutResults();我在这里做错什么了?用Neo4jClient转义字符串的正确方法是什么?
更新:我的问题不是像上面描述的那样创建一个新的节点,而是在进行时。我试着简化这个问题,然后我把这个问题去掉了。请参阅下面更新的代码,这段代码正在抛出,并为我出错。这可能是因为我只是不正确地进行on create / on match。
_client.Cypher
.Merge("(u:User { UserId: " + userId + "})")
.OnCreate()
.Set("u = {user}")
.WithParams(new { user = newUser })
.OnMatch()
.Set(string.Format("u.Name = '{0}'",
newUser.Name))
.ExecuteWithoutResults();发布于 2014-06-17 07:43:33
除了标准C#之外,您不需要执行任何转义操作(您不需要对其中的一个单引号进行转义)。下面的代码创建一个名为3 O'clock的新用户,并返回它。
var newUser = new User{Name = "3 O'clock"};
gc.Cypher
.Create("(u:Test {user})")
.WithParams(new {user = newUser})
.ExecuteWithoutResults();
var val = gc.Cypher
.Match("(n:Test)")
.Return(n => n.As<User>())
.Results
.First();
Console.WriteLine(val.Name);如果这段代码不适用于您--您使用的是什么版本的Neo4jClient,针对哪个版本的Neo4j,以及这个“UpdateCommand”是做什么的?
编辑以进行更新
您仍然应该使用参数来设置:
gc.Cypher
.Merge(string.Format("(u:User {{UserId: {0}}})", userId))
.OnCreate().Set("u = {userParam}").WithParam("userParam", newUser)
.OnMatch().Set("u.Name = {nameParam}").WithParam("nameParam", newUser.Name)
.ExecuteWithoutResults();让Neo4jClient处理所有参数的引号/格式!
https://stackoverflow.com/questions/24216583
复制相似问题