我正在构建一个应用程序,其中节点标签,参数和关系将由我的用户设置,因此在某个图层之后的nodes,rel和prop将是完全动态且不可预测的。我的问题是如何运行以下查询并将结果映射到某种列表,可用于直观地重建图形。使用neo4jClient。
我直接使用Neo4j浏览器的查询效果很好
Match(a:User),(b:Work)-->(n) Where a.UserId =
'xxxx' AND b.Name = 'CompanyA' Return b, n
在c#中我有这个,但它是我坚持的返回部分。
client.Cypher.Match("(a:User), (b:Work) --> (n)")
.Where("(a.UserId = '" + userId + "')").AndWhere("(b.Name = name"
.Return((a,n)).Results;
任何想法?
答案 0 :(得分:2)
Neo4jClient
无法直接帮助您解决此问题(从C#的角度来看)问题是客户端尝试将结果反序列化为具体的C#类型,而您并不是提供任何......
您最好的选择是与此问题的答案相同(使用dynamic
):Casting nodes of an unknown type
所以,你最终会得到类似的东西:
var query = client.Cypher
.Match("(a:User), (b:Work) --> (n)")
.Where("a.UserId = {userIdParam}")
.AndWhere("b.Name = {bNameParam}")
.WithParams( new {
userIdParam = userId,
bNameParam = name
})
.Return((a,n) => new {
A = a.As<User>(),
N = n.As<Node<string>>()
});
var results = query.Results.ToList();
var nNodes = new List<dynamic>();
foreach(var result in results)
{
nNodes.Add(JsonConvert.DeserializeObject<dynamic>(result.N.Data));
}
然后 nNodes
将包含dynamic
个对象的集合,您可以使用它们执行所需的操作。