根据关系 属性 在节点上设置 属性

Set property on Node based on relationship property

我正在进行查询,我需要该查询的结果来影响另一个节点的属性。

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")

现在,在当前运行时,我每次都会得到 'response' 作为结果,这对我编写查询的方式很有意义,但显然这不是我需要的解决方案。 任何人都可以帮助我根据此人是否是朋友、我们是否正在等待他们回复或他们是否正在等待我们回复来正确设置 'person.IsFriend' 变量。有点像 If/Else 声明,但对客户而言。

我想 return 一个根据查询规则设置 属性 isFriend 的 Person 对象(称为 friend),所以 'friend'、'pending' 或 'response' 谢谢

好的,已经与更高权力者交谈并将其作为解决方案:

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>());