2016-11-08 23 views
1

我正在第一次编写一个使用neo4j的.NET机场应用程序。我有一个API,可以获取数据库中的对象(本例中为机场)。我也可以创建新的机场neo4j query construction SyntaxException

public void Post([FromUri]string name, [FromUri]string code, [FromUri]string city, [FromUri]string state) 
{ 
    string query = "(:Airport{name:'" + name + "',code:'" + code.ToUpper() + "',city:'" + city + "',state:'" + state.ToUpper() + "'})"; 
    var q = WebApiConfig.GraphClient.Cypher.Create(query); 
    q.ExecuteWithoutResults(); 
} 

这工作正常。但我也想确保机场不存在于数据库中。所以,我试图在代码中添加:

var existing = WebApiConfig.GraphClient.Cypher.Match("(a:Airport)") 
      .Where((Airport a) => a.Code.Equals(code.ToUpper())) 
      .Return(a => a.As<Airport>()); 

但是当我运行该代码段总是抛出一个SyntaxException。我认为这是在构建where子句。

Airport类是

public class Airport 
{ 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Code { get; set; } 
} 

我使用目前的资源是https://github.com/Readify/Neo4jClient/wiki/cypher

两个问题:

  1. 我缺少的是在这里吗?
  2. 有没有其他资源可以帮助我?

谢谢

+0

喜迈克尔 - 什么是你得到的语法异常 –

+0

啊,不,我想我知道它是什么? - 我我会在几分钟内回答 –

回答

1

SyntaxException被抛出,因为Neo4jClient不知道如何处理.Equals - 如果你把你的查询,并期待在existing.Query.DebugQueryText你会看到它的输出(我传递在“松懈”为code):

MATCH (a:Airport) 
WHERE a.Code"lax" 
RETURN a 

SyntaxException来自WHERE a.Code"lax" - 所以你需要首先改变使用==操盘手:

var existing = gc.Cypher.Match("(a:Airport)") 
     .Where((Airport a) => a.Code == code.ToUpper()) 
     .Return(a => a.As<Airport>()); 

现在,如果我们看一下QueryDebugText我们得到:

MATCH (a:Airport) 
WHERE (a.Code = "lax") 
RETURN a 

但是, “宽松” 是小写 - 我们把ToUpper()那里,所以它应该是 “LAX” 吧??

Neo4jClient一个微妙的差别是,它需要有细节,他们需要的查询,这样做:

code = code.ToUpper(); 
var existing = gc.Cypher.Match("(a:Airport)") 
     .Where((Airport a) => a.Code == code) 
     .Return(a => a.As<Airport>()); 

将产生:

MATCH (a:Airport) 
WHERE (a.Code = "LAX") 
RETURN a 

您可以使用方法像ToUpper但你最终不得不把它们放在string.Format或插值:

var existing = gc.Cypher.Match("(a:Airport)") 
     .Where($"(a.Code = \"{code.ToUpper()}\")") 
     .Return(a => a.As<Airport>()); 

这是一种痛苦,因为您需要记住\"并打开/关闭括号。

一般提示是要始终查看DebugQueryText以查看正在生成的内容。

你的第二个问题,以更多的资源 - 恐怕没有:(

+0

谢谢,这很好,另外,谢谢你指出DebugQueryText,我以前没有看到它,它会非常有用。 – Michael