2015-12-29 60 views
0

我有一個非常奇怪的問題。我有一個查詢如下Neo4j Cypher,代碼和數據庫中的查詢結果不一致

var el = _client.Cypher.Match("(map:Map)-[ALSO_AS*0..4]-(alsoas:Map)") 
       .Where((MappingNode map) => map.Id == node.Id) 
       .Return((map, alsoas) => new 
       { 
        node = map.As<MappingNode>(), 
        related = alsoas.CollectAs<MappingNode>() 
       }); 
var query = el.Query; 
     var result = el.Results.SingleOrDefault(); 
     return result == null ? null : result.related.ToList(); 

這最終產生以下查詢(takem從el.Query)

MATCH (map:Map)-[ALSO_AS*0..4]-(alsoas:Map) 
WHERE (map.Id = "02E325025AMZZ") 
RETURN map AS node, collect(alsoas) AS related  

的問題是,當我運行中的Neo4j的本地命令行在瀏覽器中的查詢我得到了一些結果。而當我在c#中運行相同的查詢時,結果數量高出10倍。

C#(1個節點,〜3K相關) 數據庫(1點,約300相關)

我缺少的東西?

回答

0

跳到我身上的事情是,它看起來像你試圖匹配ALSO_AS關係類型,但由於沒有冒號,它將它解釋爲一個變量。它應該是這樣的:

[:ALSO_AS*0..4] 
0

所以我解決了這個問題。

var el = _client.Cypher.Match("(map:Map)-[r:ALSO_AS*0..4{ManCode :    {manCode}}]-(alsoas:Map)") 
       .WithParams(new 
       { 
        manCode = relation.ManCode 
       }) 
       .Where((MappingNode map) => map.Id == node.Id) 
       .Return((map, alsoas) => new 
       { 
        node = map.As<MappingNode>(), 
        related = alsoas.CollectAsDistinct<MappingNode>() 
       }); 

這是c#中的解決方案。我所缺少的是收集和正確的關係宣言。