我知道如何动态创建我的MATCH
和WHERE
条款,在我的情况下,不幸的是我必须做的事情......所以,我有类似的东西(这是一个人为的例子):
var query = client
.Cypher
.Match("(u1:User)-[:LINKED]->(w:Web)","(u2:User)-[:LINKED]->(w:Web)","(u3:User)-[:LINKED]->(w:Web)")
.Where("u1.User.Id = {u1Param}").WithParam("u1Param", 1)
.AndWhere("u2.User.Id = {u2Param}").WithParam("u2Param", 2)
.AndWhere("u3.User.Id = {u3Param}").WithParam("u3Param", 3);
Match
和Where
是根据用户输入动态生成的,这会生成正确的Cypher。
MATCH
(u1:User)-[:LINKED]->(w:Web), (u2:User)-[:LINKED]->(w:Web), (u3:User)-[:LINKED]->(w:Web)
WHERE
u1.User.Id = 1
AND u2.User.Id = 2
AND u3.User.Id = 3
在服务器上(在Cypher中)我可以做类似的事情:
RETURN u1, u2, u3
我将获得我正在寻找的3个节点。我的问题是通过neo4jclient的Returning
数据的一般方式是通过一个表达式,因此,复制我会做:
query.Return(
(u1, u2, u3) =>
{
U1 = u1.As<User>(),
U2 = u2.As<User>(),
U3 = u3.As<User>()
});
我不知道只会有'3'回复,可能会有更多,或者更少。关于如何实现这一点的任何想法?无论是按原样,还是以完全不同的方式,我都会接受所有选择。
我想要像:
query.Return<User>("u1", "u2", "u3"); //returning IEnumerable<User>
或者也许:
query.Return<User>("u1").AndReturn("u2").AndReturn("u3");
我知道我可以恢复这些查询直接通过HttpClient
或其他类似的方式调用数据库,但如果可以,我宁愿避免这样做。说实话,我很乐意将它们全部解析为dynamic
,但目前这是不可能的(或者它是???)。
答案 0 :(得分:2)
Neo4jClient没有像这样的动态返回形状的任何好解决方案。
至少在这个人为的例子中,您可以将节点展平为一个列表吗?
.Return<IEnumerable<User>>("[u1, u2, u3]")
您可以轻松地告诉您在Id
子句中使用WHERE
属性的哪个属性,但也可以在C#中使用。