0

Neo4jClient で動的 Cypher クエリを作成しようとしています。私のコードは、Neo4jClient の .Start のために非常に冗長になっています。.Start で、インデックスからノードを取得したいと考えています。ノードは 1 から 10 まで可変です。そのため、非常に長くなる switch ステートメントを作成する必要があります。

               .Start(new
                {
                    n = Node.ByIndexLookup("name_idx", "Name", sNameArray[0]),
                })

2 つのノードの場合、

               .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

たとえば、2 番目のバージョンは次のようになります。

.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 に答える