2017-04-20 162 views
0

我一直在爲此奮鬥了兩天,並且處於茫然之中。我試圖創建節點關係,並且嚴重失敗。創建關係

這是我創建和運行關係的代碼。

var query = graphClient.Cypher 
 
    .Match("(apt_1:AttackPatterns)", "(apt_2:AttackPatterns)") 
 
    .Where((AttackPatterns apt_1) => apt_1.Id == Convert.ToInt64(apt.ID)) 
 
    .AndWhere((AttackPatterns apt_2) => apt_2.Id == Convert.ToInt64(rt.Relationship_Target_ID)) 
 
    .CreateUnique("(apt_1)-[:" + rtrn.ToString() + "]->(apt_2)"); 
 

 
query.ExecuteWithoutResults();

這裏是AttackPatterns類。

public class AttackPatterns 
 
{ 
 
     public long Id { get; set; } 
 
     public string Name { get; set; } 
 
}

在運行期間,對於查詢中的值等於,在一個迭代中,爲以下內容:

MATCH(apt_1:AttackPatterns),(apt_2:AttackPatterns)\ r \ nWHERE (apt_1.Id = \「1 \」)\ r \ nAND(apt_2.Id = \「122 \」)\ r \ nCREATE UNIQUE(apt_1) - [:ChildOf] - >(apt_2)

我注意到「\ r \ n」字符。我也注意到1和122左右的引號。當我將它粘貼到Neo4j網絡界面中,用實際的新行替換「\ r \ n」並在引號前刪除「\」轉義字符時,它失敗。如果我刪除1和122周圍的引號,它會成功創建關係。

我真的不知道我做錯了什麼,並希望得到任何幫助!

+0

什麼類型是'rt' ?,並且'apt'是'AttackPatterns'? –

回答

0

我做了關於類型的一些假設,因爲我覺得知道發生了什麼事 - 基本上 - 在Convert.ToInt64稱爲由查詢之前,你必須這樣做查詢生成的外:

//Given: 
var apt = new { ID = "1" }; 

//Convert outside query 
var ap1Id = Convert.ToInt64(apt.ID); 

//Use in query 
var query = gc.Cypher 
    .Match("(apt_1:AttackPatterns)", "(apt_2:AttackPatterns)") 
    .Where((AttackPatterns apt_1) => apt_1.Id == ap1Id) // <-- using locally created var 
/* etc */ 

\r\n只是當你看DebugQueryText財產格式化,他們沒有跨越發送,唯一的問題是圍繞着數字的"

請隨意將此作爲bug添加到github項目中,我會仔細查看它,理想情況下它會事先執行,但可能是因爲這個原因。

+0

謝謝你回到我身邊。如果它給出了更多的見解,我嘗試了以下代碼,結束了工作: – Jason

+0

var query = graphClient.Cypher .Match(「(apt_1:AttackPattern)」,「(apt_2:AttackPattern)」) .Where(「 (「apt_1.Id = {id1}」) .WithParam(「id1」,Convert.ToInt64(apt.ID)) .AndWhere(「apt_2.Id = {id2}」) .WithParam(「id2」,Convert。 ToInt64(rt.Relationship_Target_ID)) .CreateUnique(「(apt_1) - [:」+ rtrn.ToString()+「] - >(apt_2)」); – Jason

+0

酷,'WithParam'調用評估它,這是比我的版本更好;) –