Neo4jClient - Как проверить, существует ли свойство

У меня возникли проблемы с преобразованием следующего запроса Cypher в синтаксис Neo4jClient.

MATCH n WHERE NOT (HAS (n.User)) ИЛИ n.User = "имя пользователя" RETURN n

Это то, что у меня сейчас есть с добавлением некоторой логики отношений и отсутствием логики HAS.

var results = Client.Cypher
               .OptionalMatch("(result)-[connection:Connection]-(result2)")
               .Where((Result result) => result.User == username)
               .Return((result, connection, result2) => new Neo4jResultSingle()
               {
                   SearchedNode = result.As<Node<Result>>(),
                   RelationshipConnection = connection.As<RelationshipInstance<Connection>>(),
                   Relationship = connection.As<RelationshipInstance<ConnectionRelationship>>(),
                   RelationshipedNode = result2.As<Node<Result>>()
               }).Results.ToList();

person Jeff H    schedule 12.11.2015    source источник
comment
Можете ли вы опубликовать точный шифрованный запрос, который вы пытаетесь перевести на С#?   -  person ceej    schedule 13.11.2015
comment
Чтобы добавить логику HAS, вы можете написать .Where("NOT HAS(n.User)")   -  person ceej    schedule 13.11.2015


Ответы (2)


Глядя на комбинацию вашего исходного запроса и вашего С#, возможно, следующее может помочь?

var results = Client.Cypher
           .Match("(result)-[connection:Connection]-(result2)")
           .Where("WHERE NOT HAS(n.User) OR n.User = {username}")
           .WithParams(new { username = username })
           .Return((result, connection, result2) => new Neo4jResultSingle()
           {
               SearchedNode = result.As<Node<Result>>(),
               RelationshipConnection = connection.As<RelationshipInstance<Connection>>(),
               Relationship = connection.As<RelationshipInstance<ConnectionRelationship>>(),
               RelationshipedNode = result2.As<Node<Result>>()
           })
           .Results
           .ToList();

Это переписывает ваше предложение WHERE, чтобы включить как HAS, так и логику имени пользователя, в то же время параметризуя его для кэширования плана запроса и защиты от внедрения.

person ceej    schedule 12.11.2015