C# 如何使用cypher通过neo4jclient返回关系及其属性
请在下面找到密码查询(这是正常的) 第一个问题: 如何在我的c代码中将其转换为neo4jClient 第二个问题: 该关系具有多个属性。如何使用neo4Jclient访问它们 实体具有EntityName和DataSpaceName属性 该关系具有属性RelationType和RelationFrequency 我用于获取节点详细信息的代码如下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:
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