Динамическое создание запроса в Neo4jClient

Я пытаюсь создать динамический запрос Cypher с Neo4jClient. Мой код становится очень избыточным из-за.Start в Neo4jClient. В.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. Если я смогу обойти это, у меня будет хороший чистый код. Какие-либо предложения?

1 ответ

Решение

Вы можете использовать словарь, например, ваша вторая версия может быть:

.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 ****/ );
Другие вопросы по тегам