C# 如何使用cypher通过neo4jclient返回关系及其属性

C# 如何使用cypher通过neo4jclient返回关系及其属性,c#,neo4j,cypher,neo4jclient,C#,Neo4j,Cypher,Neo4jclient,请在下面找到密码查询(这是正常的) 第一个问题: 如何在我的c代码中将其转换为neo4jClient 第二个问题: 该关系具有多个属性。如何使用neo4Jclient访问它们 实体具有EntityName和DataSpaceName属性 该关系具有属性RelationType和RelationFrequency 我用于获取节点详细信息的代码如下 var query1 = client .Cypher .Match("(a:`Entity`) - [r] - (b:

请在下面找到密码查询(这是正常的)

第一个问题: 如何在我的c代码中将其转换为neo4jClient

第二个问题: 该关系具有多个属性。如何使用neo4Jclient访问它们

实体具有EntityName和DataSpaceName属性 该关系具有属性RelationType和RelationFrequency

我用于获取节点详细信息的代码如下

var query1 = client
        .Cypher
        .Match("(a:`Entity`) - [r] - (b:`Entity`)") 
        .Where("a.DataSpace = b.DataSpace")
        .Return((a,b) => new {
            FromEntity = Return.As<string>("a.EntityName"),
            ToEntity=Return.As<string>("b.EntityName")
            }
        );
var query1=客户端
塞弗先生
.Match(((a:`Entity`)-[r]-(b:`Entity`)))
.其中(“a.DataSpace=b.DataSpace”)
.返回((a,b)=>新建{
FromEntity=Return.As(“a.EntityName”),
ToEntity=Return.As(“b.EntityName”)
}
);
编辑:

我试着去想。以下措施奏效了

var query1 = client
        .Cypher
        .Match("(a:`Entity`) - [r] - (b:`Entity`)") 
        .Where("a.DataSpace = b.DataSpace")
        .Return((a,b) => new {
            FromEntity = Return.As<string>("a.EntityName"),
            ToEntity=Return.As<string>("b.EntityName"),
            Relation=Return.As<string>("r.RelType"),

            }
        );
var query1=客户端
塞弗先生
.Match(((a:`Entity`)-[r]-(b:`Entity`)))
.其中(“a.DataSpace=b.DataSpace”)
.返回((a,b)=>新建{
FromEntity=Return.As(“a.EntityName”),
ToEntity=Return.As(“b.EntityName”),
关系=返回.As(“r.RelType”),
}
);

但是,如果关系是通配符,即[*]或[r*1..3],我将如何获取关系的属性。

关系对象与节点对象相同,因此获取它们的方式相同

你实际上是如何设置元素的?什么是“实体”,假设您有如下类:

public class Entity {
    public string DataSpace { get; set; }
    public string EntityName { get; set; }
}
和关系对象:

public class RelationshipObj {
    public string RelType { get; set; }
}
var query = graphClient.Cypher
    .Match("(a:`Entity`)-[r*]-(b:`Entity`)")
    .Where("a.DataSpace = b.DataSpace")
    .Return((a, b, r) => new
    {
        FromEntity = a.As<Entity>().EntityName,
        ToEntity = b.As<Entity>().EntityName,
        Relation = r.As<IEnumerable<RelationshipInstance<Dictionary<string,string>>>>(),
    });

var results = query.Results.ToList();

foreach (var result in results)
{
    foreach (var relationship in result.Relation)
    {
        if (relationship.TypeKey == "REL_TO")
        {
            var obj = JsonConvert.DeserializeObject<RelationshipObj>(JsonConvert.SerializeObject(relationship.Data));
            Console.WriteLine(obj.RelType);
        }
    }
}
你会带着这样的东西回来:

var originalQuery = graphClient
    .Cypher
    .Match("(a:`Entity`)-[r]-(b:`Entity`)")
    .Where("a.DataSpace = b.DataSpace")
    .Return((a, b, r) => new
    {
        FromEntity = a.As<Entity>().EntityName,
        ToEntity = b.As<Entity>().EntityName,
        Relation = r.As<RelationshipObj>().RelType,
    });
如果以后不分析结果,则无法再从中提取“RelType”属性:

foreach (var result in results)
{
    foreach (var relationship in result.Relation)
    {
        Console.WriteLine(relationship.RelType);
    }
}
现在,您实际询问如何处理通配符关系,显然您无法获得上述属性,因为您实际上不知道您要的是什么。您可以通过
字符串
获得结果,并使用JSON.NET将其解析为正确的对象。但是,您也可以返回
RelationshipInstance
,它将为您提供关系的
TypeKey
,您可以使用它将关系对象反序列化为:

public class RelationshipObj {
    public string RelType { get; set; }
}
var query = graphClient.Cypher
    .Match("(a:`Entity`)-[r*]-(b:`Entity`)")
    .Where("a.DataSpace = b.DataSpace")
    .Return((a, b, r) => new
    {
        FromEntity = a.As<Entity>().EntityName,
        ToEntity = b.As<Entity>().EntityName,
        Relation = r.As<IEnumerable<RelationshipInstance<Dictionary<string,string>>>>(),
    });

var results = query.Results.ToList();

foreach (var result in results)
{
    foreach (var relationship in result.Relation)
    {
        if (relationship.TypeKey == "REL_TO")
        {
            var obj = JsonConvert.DeserializeObject<RelationshipObj>(JsonConvert.SerializeObject(relationship.Data));
            Console.WriteLine(obj.RelType);
        }
    }
}
var query=graphClient.Cypher
.Match(((a:`Entity`)-[r*]-(b:`Entity`))
.其中(“a.DataSpace=b.DataSpace”)
.返回((a,b,r)=>新
{
FromEntity=a.As().EntityName,
ToEntity=b.As().EntityName,
关系=r.As(),
});
var results=query.results.ToList();
foreach(结果中的var结果)
{
foreach(result.Relation中的var关系)
{
if(relationship.TypeKey==“REL_TO”)
{
var obj=JsonConvert.DeserializeObject(JsonConvert.SerializeObject(relationship.Data));
控制台写入线(对象类型);
}
}
}

我们必须做一些奇怪的反序列化/序列化的事情,因为我们不能仅仅使用
RelationshipObject
,因为通用部分上有一个约束。

添加了输入,实体之间的关系有一个属性“RelType”。如何翻译匹配(a:
实体
)-[r]-(b:
实体
)返回a,r.RelType,b