C# 如何使用neo4j的.net客户端检查两个节点之间是否存在关系

C# 如何使用neo4j的.net客户端检查两个节点之间是否存在关系,c#,neo4j,neo4jclient,C#,Neo4j,Neo4jclient,我有一个基于角色的应用程序和两个节点role和Cartable,我通过在这两个节点之间创建关系来管理我的权限,如果这两个节点之间存在关系,则表示此角色有权查看Cartable: client.Cypher .Merge("(s:SiteConfiguration)-[:" + Relations.ROLE_IN_SITE.ToString()+ "]-(r:Role)-[r1:" + Relations.ROLE_HAS

我有一个基于角色的应用程序和两个节点
role
Cartable
,我通过在这两个节点之间创建关系来管理我的权限,如果这两个节点之间存在关系,则表示此角色有权查看Cartable:

client.Cypher

            .Merge("(s:SiteConfiguration)-[:" 
            + Relations.ROLE_IN_SITE.ToString()+ "]-(r:Role)-[r1:"
            + Relations.ROLE_HAS_CARTABLE.ToString() + "]->(ca:Cartable)")
            .Where("r.Id = {param}").WithParam("param", roleId)
            .AndWhere("ca.Id= {param1}").WithParam("param1", cartableId)
            .AndWhere("s.SiteId= {param2}").WithParam("param2", MvcApplication.SiteConfigurations.Base.SiteId)
            .CreateUnique("(r)-[:" + Relations.EDIT_COMMENT.ToString()+"]-(ca)")
            .ExecuteWithoutResults();
现在我想检查两个节点之间是否存在关系,并基于此返回一个布尔值,因此我写了以下内容:

var q = new CypherFluentQuery(client) as ICypherFluentQuery;

q = q.Match("(s:SiteConfiguration)-[:" 
    + Relations.ROLE_IN_SITE.ToString() + "]-(r:Role)-[r1:" 
    + Relations.VIEW_CARTABLE.ToString() + "]-(c:Cartable)");
q = q.Where("s.SiteId= {param}").WithParam("param", MvcApplication.SiteConfigurations.Base.SiteId);
q = q.AndWhere("r.Id= {param1}").WithParam("param1", roleId);
q = q.AndWhere("c.Id= {param2}").WithParam("param2", cartableId);

但是我不确定我应该在这里返回什么,因为
VIEW\u CARTABLE
在关系上没有任何作为匿名对象的值。所以我的问题是如何检查这两个节点之间是否存在某种关系

我认为只要看看
r1
是否不为空就足够了,因为获得非空值的唯一方法是关系是否存在。

因为您使用的是
匹配
-如果
r1
不存在,您将不会得到任何结果。如果您知道您将获得
(s)-->(r)
,但不确定
(r)-->(c)
,则需要转到
可选的

例如(使用
:播放电影
db):


您可以检查
IsCartable
是否为
true
或者
Cartable==null

嘿,所以我尝试了这个:
var ret=q.Return(r1=>r1.Count()).Results.First()有意义,对吗?根据
ret
我可以指定关系是否存在?谢谢,有意义:D
var query = gc.Cypher
    .Match("(p:Person {name:'Julia Roberts'})")
    .OptionalMatch("(p)-[r]->(m:Movie)")
    .Where("m.title = 'The Green Mile'")
    .Return((p, m) => new
    {
        Person = p.As<Person>(),
        Movie = m.As<Movie>(),
        IsInMovie = Return.As<bool>("NOT (r IS NULL)")
    });
var q = new CypherFluentQuery(client)
    .Match("(s:SiteConfiguration)-[:ROLE_IN_SITE]-(r:Role)")
    .OptionalMatch("(r)-[r1:VIEW_CARTABLE]-(c:Cartable)")
    .Where("s.SiteId= {param}").WithParam("param", MvcApplication.SiteConfigurations.Base.SiteId)
    .AndWhere("r.Id= {param1}").WithParam("param1", roleId)
    .AndWhere("c.Id= {param2}").WithParam("param2", cartableId)
    .Return((s,r,c,r1) => new {
        Site = s.As<SiteConfiguration>(),
        Role = r.As<Role>(),
        Cartable = c.As<Cartable>(),
        IsCartable = Return.As<bool>("NOT (r1 IS NULL)")
        });