2017-10-02 1 views
0

나는 모두 연결되어있는 요일 목록을 생성하는 프로그램을 작성하려고합니다. 양식 (월요일) -> (화요일) -> (수요일) ... 웹 인터페이스를 통해 Cypher 쿼리를 직접 작성하여이 작업을 수행 할 수는 있지만 프로그래밍 방식으로 C#에서 GraphDatabase.Driver . 1 일차를 만드는 쿼리가 작동하는 것처럼 보이지만 몇 가지 이유로 두 번째 쿼리가 작동하지 않습니다. 코드는 다음과 같습니다.net을 사용하여 단일 neo4j 쿼리에서 일치 및 만들기 수행

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] } }); 
      } 
     } 

답변

0

매개 변수 주위에 아포스트로피를 추가하지 마십시오. 첫 번째 CREATE 쿼리에서이 규칙은 유지되지만 두 번째 쿼리에서는 '{day1} ''{day2}'을 아포스트로피로 묶지 마십시오.

또한 하나의 사이퍼 명령 목록을 연결 전체 만들 수 있습니다 관계를 만들 수있는 인덱스의 집합을 통해

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) 

이 처음은 그 일에 대한 노드 (총 7), 반복을 만듭니다 (6).

+0

도움을 주셔서 대단히 감사합니다. –

+0

대단합니다. 이 답변이 귀하의 필요 사항을 완전히 충족 시키면 승인 된 것으로 표시하십시오. –

관련 문제