neo4j查询构造语法异常

时间:2016-11-08 17:46:41

标签: c# neo4j neo4jclient

我是第一次使用neo4j编写.NET机场应用程序。我有一个API,可以获取数据库中的对象(本例中的机场)。我也可以用

创建新的机场
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. 那里有其他资源可以帮助我吗?
  3. 谢谢

1 个答案:

答案 0 :(得分:1)

由于nums = [3,3] def remove_element(nums, val) nums.delete_if { |element| element == val } nums.length end remove_element(nums, 3) #=> 0 不知道如何处理require 'benchmark' array = Array.new(100000) { rand(5) } Benchmark.bm do |x| x.report("delete: ") { array.delete(5) } x.report("delete_if: ") { array.delete_if { |e| e == 5 } } x.report("reject: ") { array.reject! { |e| e == 5 } } end # user system total real # delete: 0.000000 0.000000 0.000000 ( 0.004230) # delete_if: 0.010000 0.000000 0.010000 ( 0.006387) # reject: 0.010000 0.000000 0.010000 ( 0.007543) 而导致SyntaxException被抛出 - 如果您接受查询并查看Neo4jClient您&# 39;我会看到它的输出(我传入&#39;松弛&#39;为.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>());

但是&#34;松弛&#34;小写 - 我们把QueryDebugText放在那里,所以它应该是&#34; LAX&#34;右??

MATCH (a:Airport) WHERE (a.Code = "lax") RETURN a 的细微差别在于它需要具有查询所需的详细信息,所以这样做:

ToUpper()

将生成:

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>()); 以查看正在生成的内容。

关于更多资源的第二个问题 - 我担心没有:(