我正在进行查询,我需要该查询的结果来影响另一个节点的属性。
return client.Cypher
.Match("(person:Person),(me:Person)")
.Where((Person person) => person.Email == friend)
.AndWhere((Person me) => me.Email == username)
//is friend, doesn't matter about relationship direction
.OptionalMatch("(me)-[t:IS_FRIENDS_WITH{confirmed:true}]-(person)")
.Set("person.isFriend = 'isfriend'")
.With("person,me,t")
//pending, I added them, we are waiting for them
.OptionalMatch("(me)-[u:IS_FRIENDS_WITH{confirmed:false}]->(person)")
.Set("person.isFriend = 'pending'")
.With("person,me,t,u")
//awaiting response, they added me, I need to respond
.OptionalMatch("(me)<-[v:IS_FRIENDS_WITH{confirmed:false}]-(person)")
.Set("person.isFriend = 'response'")
.With("person,me,t,u,v")
现在,由于目前正在运行,我得到了回复#39每次都是结果,这对我编写查询的方式很有意义,但显然这不是我需要的解决方案。 任何人都可以帮助我设置这个人.IsFriend&#39;如果这个人是朋友,我们是否在等待他们回应,或者他们是否在等待我们做出回应,则可以正确变量。有点像If / Else语句,但对于客户来说。
我想返回一个Person对象(称为friend),该对象具有根据查询中的规则设置的属性isFriend,因此字符串为“朋友”,“等待”&#39;或者&#39;回复&#39; 感谢
答案 0 :(得分:2)
好的,已经与更高权力人士交流并将其作为解决方案:
var query = gc.Cypher.Match("(person:Person),(me:Person)")
.Where((Person person) => person.Email == potentialFriend)
.AndWhere((Person me) => me.Email == username)
.Set( @"person.isFriend = CASE
WHEN(me) -[:IS_FRIENDS_WITH { confirmed: true}]-(person)THEN 'isFriend'
WHEN(me) -[:IS_FRIENDS_WITH { confirmed: false}]->(person)THEN 'pending'
WHEN(me) < -[:IS_FRIENDS_WITH { confirmed: false}]-(person)THEN 'response'
END")
.Return(person => person.As<Person>());