我刚刚开始在我的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
答案 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
});
显然,这假设您有一个Flight
和Airport
类。