2015-12-05 76 views
1

我用neo4j 2.2.1,我有這樣的代碼:如何使用.Net neo4j客戶端獲取屬性的sum()?

MATCH (n:person)-[r:BUY]->(p:product) WHERE p.name IN ['Bag','Book','Pencil'] RETURN SUM(r.total) AS st, n ORDER BY st DESC LIMIT 1 

,我要儘量把這段代碼轉換爲C#,

類:

public class person 
{ 
    public string name { get; set; } 
} 
public class product 
{ 
    public string name { get; set; } 
} 

public class buy 
{ 
    public int total { get; set; } 
} 

這裏是我的查詢

public void search1() 
{ 
    var data1 = new[] { Bag, Book, Pencil }; 

    var cypher = client.Cypher 
     .Match("(n:person)-[r:BUY]->(p:product)") 
     .Where(" p.name IN {data1}") 
     .WithParams(new { data1 }) 
     .Return((n, r) => new 
     { 
      person1 = n.As<person>(), 
      buy1 = r.As<buy>(), 
      }) 

     .OrderByDescending("sum(r.total)").Limit(1); //this is an error 

    foreach (var result in cypher.Results) 
    { 
     result1 = result.person1.name; 
     total1 = result.buy.total; // I want to get sum(r.total) but I can't 
    } 

} 

那麼,我的查詢出了什麼問題,我該如何解決?

回答

2

我想你應該找到這將工作,只要你想:

Cypher.Match("(n:Person)-[r:BUY]->(p:product)") 
    .Where("p.name in {data1}") 
    .WithParams(new {data1}) 
    .Return(n => new { 
     Person = n.As<Person>(), 
     Total = Return.As<int>("SUM(r.Total)") 
    }) 
    .OrderByDescending("Total") 
    .Limit(1) 

我不知道你會在你的原始查詢返回a參數來自,因爲你不在任何地方a數學。

+0

非常感謝,這是工作。 –

1

我想你只需要添加一個WITH - 使用總和屬性的別名 - 到你的密碼語句。我已經有了一個類似的查詢,我已經完成了它,並且工作。

像這樣:

var cypher = client.Cypher 
      .Match("(n:person)-[r:BUY]->(p:product)") 
      .Where(" p.name IN {data1}") 
      .WithParams(new { data1 }) 
      .With("a,r,sum(r.total) as sumtotal") 
      .Return((a, r) => new 
      { 
       person1 = a.As<person>(), 
       buy1 = r.As<buy>(), 
       }) 

      .OrderByDescending("sumtotal").Limit(1); 
+0

如何獲得結果sumtotal返回查詢c#?提前預告 –

相關問題