0

我正在尝试使用 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 语句。如果我能绕过它,我将有漂亮干净的代码。有什么建议么?

4

1 回答 1

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 ****/ );
于 2013-08-01T16:22:17.207 回答