在 neo4j .net 客户端中使用 cypher foreach

using cypher foreach In neo4j .net client

我将 C# 中的 neo4j 与 Neo4jClient v 1.1.0.34 一起使用,并希望使用 foreach 更新 C# 中记录的多个值,我有以下代码:

graphClient.Cypher.Match("(u:User)-[:HAS_EMAIL]->(e:Email)-[:HAS_VER_CODE]->(s:VerCode)"
)
.Where((User u, Email e, VerCode s) => (
       u.id == user.id && e.address == email.address 
       && e.isVerified == false && s.expiry > DateTime.Now))
.Set("s.expiry = {now}")
.WithParam("now", DateTime.Now)
.ExecuteWithoutResults();

照原样,上面的代码没有在任何匹配节点上设置到期字段。

我需要将过期字段设置为当前日期时间,但我不知道如何使用 .foreach(并且未能在 C# 中找到任何示例),每个模板的 .for 是这样给出的:

.foreach (var item in collection){}

感谢您的宝贵时间,

阿德里安

抱歉 - 完全误解了您的问题。

在 Cypher 中使用 foreach 与在 C# 中使用 foreach 不同,您需要的是您要搜索的内容的集合,:

public class IdAndEmail { int Id {get;set;} string Address {get;set;} }

var idAndEmails = new List<IdAndEmail>{ new IdAndEmail { Id = 1, Address = "a@b.com"} /*etc*/ };

一旦你有了它,你的密码就变成了:

graphClient.Cypher.Foreach(idAndEmails, "x")
    .Match("(u:User)-[:HAS_EMAIL]->(e:Email)-[:HAS_VER_CODE]->(s:VerCode)")
    .Where("u.id = x.Id AND e.address = x.Address")
    .AndWhere((Email e, VerCode s) => (e.isVerified == false && s.expiry > DateTime.Now))
    .Set("s.expiry = {now}")
    .WithParam("now", DateTime.Now)
    .ExecuteWithoutResults();

我不是在某个地方输入此代码,我可以完全测试代码在语法方面是否正确,但这应该可以帮助您。