2017-10-02 2 views
0

J'essaie d'écrire un programme qui génère une liste des Jours de la semaine qui sont tous liés entre eux. sous la forme (lundi) -> (mardi) -> (mercredi) ... Bien que je puisse le faire en écrivant les requêtes Cypher directement via l'interface web, je n'arrive pas à le faire par programmation en C# en utilisant GraphDatabase.Driver . La requête pour créer Jour 1 semble fonctionner, mais pour une raison quelconque, ma deuxième requête ne fonctionne pas. Voici le codeExécution de la fonction Correspondance et création dans une requête neo4j unique avec .net

string[] days = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; 

using (var driver = GraphDatabase.Driver("bolt://localhost:7687", AuthTokens.Basic(<my_username>, <my_password>))) 
     using (var session = driver.Session()) 
     { 

      session.Run("CREATE (d1: Day {day: {Day1}}) ", new Dictionary<string, object> { { "Day1", days[0] }}); 

      for (int i = 1; i < days.Length-2; i++) 
      { 
       session.Run("" + 
        "Match (d :Day {day:'{day1} '}) " + 
        "WITH d " + 
        " CREATE (d)-[:before] -> (d2 :Day {day:'{day2}'}) ", new Dictionary<string, object> { { "day1", days[i-1] }, { "day2", days[i] } }); 
      } 
     } 

Répondre

0

Vous ne devez pas ajouter d'apostrophes autour des paramètres. Dans votre première requête CREATE, cette règle est conservée, mais dans la deuxième requête, '{day1} ' et '{day2}' ne doivent pas être entourés d'apostrophes.

Vous pouvez également créer toute la liste chaînée en une seule commande Cypher:

WITH ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] as days 
UNWIND days AS day 
CREATE (:Day {day: day}) 
WITH DISTINCT days 
UNWIND range(0, length(days) - 2) AS i 
MATCH (d1:Day {day: days[i]}), (d2:Day {day: days[i+1]}) 
CREATE (d1)-[:before]->(d2) 

Ce premier crée les noeuds pour les jours (7 au total), puis itère à travers un ensemble d'indices pour créer les relations (6).

+0

Merci beaucoup pour votre aide –

+0

De rien. Si cette réponse répond entièrement à vos besoins, veuillez la marquer comme acceptée. –