我正在尝试使用Neo4jClient创建动态Cypher查询。由于Neo4jClient中的.Start,我的代码变得非常冗余。在.Start中,我想从索引中获取节点。节点可以从1到10变化。所以我必须创建一个switch语句,它变得非常长。
.Start(new
{
n = Node.ByIndexLookup("name_idx", "Name", sNameArray[0]),
})
对于两个节点,它是
.Start(new
{
n = Node.ByIndexLookup("name_idx", "Name", sNameArray[0]),
m = Node.ByIndexLookup("name_idx", "Name", sNameArray[1]),
})
等等
.Match和.With是使用字符串操作动态生成的,所以没有问题。 .Return只有有限的回报价值,所以也没有问题。
我主要担心的是.Start,我必须重复完整的.Cypher语句。如果我可以解决它,我会有很好的清洁代码。有什么建议吗?
答案 0 :(得分:3)
您可以使用词典,例如您的第二个版本可能是:
.Start(new Dictionary<string, object>{
{"n", Node.ByIndexLookup("name_idx", "Name", sNameArray[0])},
{"m", Node.ByIndexLookup("name_idx", "Name", sNameArray[1])},
}
这将允许您执行以下操作:
var start = new Dictionary<string, object>();
for(int i = 0; i < sNameArray.Length; i++)
{
start.Add("n" + i, Node.ByIndexLookup("name_idx", "Name", sNameArray[i]));
}
graphClient.Cypher.Start(start).Where( /**** ETC ****/ );