Neo4jClient - 如何检查属性是不是存在

Posted

技术标签:

【中文标题】Neo4jClient - 如何检查属性是不是存在【英文标题】:Neo4jClient - How to check if property existsNeo4jClient - 如何检查属性是否存在 【发布时间】:2015-11-12 16:47:36 【问题描述】:

我在将以下 Cypher 查询转换为 Neo4jClient 语法时遇到问题。

匹配 n WHERE NOT (HAS (n.User)) OR n.User = "username" 返回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();

【问题讨论】:

您能否发布您尝试转换为 C# 的确切密码查询? 添加HAS逻辑可以写.Where("NOT HAS(n.User)") 【参考方案1】:

HASEXISTS() 取代

来自最新文档:Property existence checking

MATCH (n) WHERE EXISTS(n.User) RETURN n

对于相反的匹配添加NOT之前

MATCH (n) WHERE NOT EXISTS(n.User) RETURN n

【讨论】:

【参考方案2】:

查看原始查询和 C# 的组合可能会有所帮助?

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 和用户名逻辑,同时对其进行参数化以缓存查询计划并防止注入。

【讨论】:

以上是关于Neo4jClient - 如何检查属性是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 XmlAttributeCollection 中是不是存在属性?

如何简化检查 TypeScript 中是不是存在属性?

如何快速检查对象数组中是不是存在属性值

如何检查 ViewBag 属性是不是为空或不存在

如何检查 XML 中是不是存在特定属性?

如何检查 C# 中的动态匿名类型上是不是存在属性?