将包含split和toint的cypher查询转换为C#

时间:2017-07-27 07:49:16

标签: c# neo4j neo4jclient

我刚刚开始在我的neo4j项目中使用neo4j客户端,并且面临将下面的cypher查询转换为C#的困难。特别是分裂和toint功能。

如果你可以帮我解决这个问题,那将是很好的,因为我已经尝试了很长时间了。我甚至看过其他网络资源但却从中获得了很多。谢谢你的帮助。

MATCH 
    (a:Airport {city:"LAX"})-[:has_flight]->(f:Flight {dep_date:"2017-07-27"})-[:flies_to]->(b:Airport)-[:has_flight]->(f2:Flight)-[:flies_to]->(c:Airport {city:"CLO"}) 
WITH 
    a,b,c,f,f2,
    split(f.arr_date,"-") as dd, 
    split(f2.dep_date,"-") as dd2 
WHERE 
    toint(dd2[2]) - toint(dd[2])>=0 
    AND toint(dd2[2])- toint(dd[2]) <=1 
RETURN 
    f,f2,a.city,b.city,c.city

1 个答案:

答案 0 :(得分:0)

您需要将查询分解为组成部分,如果您使用新行,则更容易:

//MATCH
match (a:Airport {city:"LAX"})-[:has_flight]->(f:Flight {dep_date:"2017-07-27"})-[:flies_to]->(b:Airport)-[:has_flight]->(f2:Flight)-[:flies_to]->(c:Airport {city:"CLO"}) 

//WITH
with a,b,c,f,f2,split(f.arr_date,"-") as dd, split(f2.dep_date,"-") as dd2 

//WHERE
where toint(dd2[2]) - toint(dd[2])>=0 
and toint(dd2[2])- toint(dd[2])<=1 

//RETURN
return f,f2,a.city,b.city,c.city

一旦你拥有它,转换为Neo4jClient非常简单,例如:

client.Cypher
     .Match("(a:Airport {city:"LAX"})-[:has_flight]->(f:Flight {dep_date:"2017-07-27"})-[:flies_to]->(b:Airport)-[:has_flight]->(f2:Flight)-[:flies_to]->(c:Airport {city:"CLO"})")
     .With("a,b,c,f,f2,split(f.arr_date,"-") as dd, split(f2.dep_date,"-") as dd2")
     .Where("toint(dd2[2])- toint(dd[2])<=1")
     .AndWhere("toint(dd2[2])- toint(dd[2])<=1")
     .Return((f,f2,a.city,b.city,c.city) => new {
        Flight1 = f.As<Flight>(),
        Flight2 = f2.Asflight>(),
        City1 = a.As<Airport>().City,
        City2 = b.As<Airport>().City,
        City3 = c.As<Airport>().City
     });

显然,这假设您有一个FlightAirport类。