2013-08-24 45 views
4

我是Neo4j的新手,嘗試在where子句中使用lambda表達式執行簡單的Cypher查詢,但出於某種原因,我似乎無法弄清楚爲什麼這不是'不工作。WHERE子句中的Lambda表達式不按預期方式工作

的樣子:

class HealthNode { 
    public string Name{get;set;} 
    //Other Stuff 
} 
string Name = "Foobar"; 

var query = client 
    .Cypher 
    .Start(new { n = Neo4jClient.Cypher.All.Nodes }) 
    .Where((HealthNode n) => n.Name == Name) 
    .Return<HealthNode>("n");   

如果我傾倒的文本和參數我越來越:

START n=node(*) 
WHERE (n.Name! = {p0}) 
RETURN n 
//P0 Foobar 

當我執行這個,我當然得:

Cypher does not support != for inequality comparisons. Use <> instead 

爲什麼在這個世界上有一個額外的驚歎號指向變量的名字?

回答

0

!表示如果該屬性不存在,則結果將爲false。因此,如果圖中有多個類型,而其他類型沒有'Name'屬性,則neo4j不會打擾匹配。

查看Neo4J Documentation瞭解更多信息。

至於獲得!=警告,你是否在粘貼時改變查詢?重新格式化它?當我得到同樣的警告,如果我做的:

WHERE (n.Name != {p0}) 

,但沒有得到任何警告,併成功完成,如果我使用:

WHERE (n.Name! = {p0}) 
+0

我用複製/粘貼來得到確切的文字。 –

+0

你在哪裏粘貼?只要'!'和'='之間有空格,就不會出錯。如果你運行這個查詢:'START n = node(0)WHERE n.Name! =「TEST」RETURN n;'在密碼控制檯中是否顯示相同的錯誤? –

+0

我使用了複製/粘貼來獲取確切的文本,並且我還去了shell本身,並在個人輸入它以防萬一有隱藏的字符,但解析器返回相同的錯誤。 (抱歉,格式不佳,我沒有這個網站的掛起) 'START n = node(*)WHERE(n.Name!=「FOO」)RETURN n;'返回本地錯誤服務器(2.0.0-M04 Windows社區) 奇怪的是,如果我在[http://www.neo4j.org/learn/try] 針對實時示例數據庫執行相同的確切查詢,我會懷疑是否這是在窗口構建這個特殊版本的解析器中的錯誤? –

0

我想我找到了問題的原因在這裏:

對2.0分析器進行了更改,默認情況下實現了NULL IF(而不是在缺少的屬性上返回錯誤)並刪除!和?因爲他們不再做任何事情。

neo4j pull request 1014 我懷疑這會打破很多東西,而不僅僅是Neo4J客戶端。

0

在與Neo2j 2.0交談時,在Neo4jClient 1.0.0.625及更高版本中修復。

相關問題