У меня очень своеобразная проблема. У меня следующий запрос

  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, я получаю x результатов. Когда я запускаю тот же запрос в C #, количество результатов в 10 раз выше.

C # (1 узел, ~ 3k связанных) база данных (1 узел, ~ 300 связанных)

Я что-то упускаю?

0
Shuffler 29 Дек 2015 в 13:26

2 ответа

Лучший ответ

Меня поразило то, что похоже, что вы пытаетесь сопоставить тип отношения ALSO_AS, но поскольку двоеточия нет, он интерпретирует его как переменную. Должно получиться так:

[:ALSO_AS*0..4]
0
Brian Underwood 29 Дек 2015 в 12:55

Итак, я решил проблему.

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 #. То, что мне не хватало, отличалось от сбора и правильного объявления о родстве.

0
Shuffler 30 Дек 2015 в 13:02