首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4jClient单引号传递

Neo4jClient单引号传递
EN

Stack Overflow用户
提问于 2014-06-14 04:30:24
回答 1查看 663关注 0票数 0

我试图在使用Neo4j时传递一个带有单引号的变量,同时使用Neo4jClient,而且我似乎无法正确地获得字符转义。

当我用这个:

代码语言:javascript
复制
var Command = new UpdateCommand()
{
    Name = "3 o'clock";
};

我收到一个错误,说有一个语法错误。当我用这个:

代码语言:javascript
复制
var Command = new UpdateCommand()
{
    Name = "3 o\\'clock ";
};

它错误地用额外的转义字符存储变量名。

我的create节点非常简单,看起来是这样的,newUser对象有一个属性(名称),该属性由命令设置。

代码语言:javascript
复制
_client.Cypher
   .Create("(u:User {user})")
   .WithParams(new { user = newUser })
   .ExecuteWithoutResults();

我在这里做错什么了?用Neo4jClient转义字符串的正确方法是什么?

更新:我的问题不是像上面描述的那样创建一个新的节点,而是在进行时。我试着简化这个问题,然后我把这个问题去掉了。请参阅下面更新的代码,这段代码正在抛出,并为我出错。这可能是因为我只是不正确地进行on create / on match。

代码语言:javascript
复制
_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();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-17 07:43:33

除了标准C#之外,您不需要执行任何转义操作(您不需要对其中的一个单引号进行转义)。下面的代码创建一个名为3 O'clock的新用户,并返回它。

代码语言:javascript
复制
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”是做什么的?

编辑以进行更新

您仍然应该使用参数来设置:

代码语言:javascript
复制
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处理所有参数的引号/格式!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24216583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档