Лямбда-выражение в предложении WHERE не работает должным образом

Я новичок в Neo4j и пытаюсь выполнить простой запрос Cypher, используя лямбда-выражение в предложении where, но по какой-то причине я не могу понять, почему это не работает.

Выглядит как:

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

Почему в мире лишний восклицательный знак к имени переменной?


person Warren Y    schedule 24.08.2013    source источник


Ответы (3)


! означает, что результат будет ложным, если свойство не существует. Итак, если у вас есть более одного типа в графе, и у этого другого типа нет свойства «Имя», neo4j не будет сопоставлять.

См. документацию Neo4J для получения дополнительной информации.

Что касается получения предупреждения !=, вы вообще меняете запрос, когда вставляете его? Переформатировать? Поскольку я получаю такое же предупреждение, если я это делаю:

WHERE (n.Name != {p0})

но не получаю никаких предупреждений и успешного завершения, если я использую:

WHERE (n.Name! = {p0})
person Charlotte Skardon    schedule 25.08.2013
comment
Я использовал копирование/вставку, чтобы получить точный текст. - person Warren Y; 25.08.2013
comment
Куда вы вставляете? Пока между ! и = есть пробел, вы не должны получить ошибку. Если вы запустите этот запрос: START n=node(0) WHERE n.Name! = "TEST" RETURN n; в консоли шифрования, это покажет ту же ошибку? - person Charlotte Skardon; 25.08.2013
comment
Хороший улов, онлайн-образцы предположительно работают со стабильной версией 1.9x, а не 2.0. - person Charlotte Skardon; 26.08.2013

Я думаю, что нашел причину проблемы здесь:

В синтаксический анализатор версии 2.0 было внесено изменение, которое по умолчанию реализует NULL IF (вместо того, чтобы возвращать ошибку при отсутствующем свойстве) и удаляет ! и ? операторы, так как они больше ничего не делают.

реквест на вытягивание neo4j 1014 Я подозреваю, что это сломает многое, а не только клиент Neo4J.

person Warren Y    schedule 25.08.2013

Исправлено в Neo4jClient 1.0.0.625 и выше при разговоре с Neo2j 2.0.

person Tatham Oddie    schedule 25.10.2013