2016-04-18 16 views
0

ich mit dem Neo4jClient v 1.1.0.34 von C# bin mit Neo4j verwenden und möchte foreach verwenden, um einen Wert in mehr in C# bemerkt zu aktualisieren, habe ich den folgenden Code:Chiffre foreach In Neo4j .net-Client

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

Der obige Code setzt das Verfallsfeld auf keinem der übereinstimmenden Knoten.

Ich muss das Verfallsfeld auf die aktuelle Datum Zeit setzen, aber ich kann nicht herausfinden, wie die .foreach (und haben keine Beispiele in C# finden), die .for jede Vorlage ist wie folgt:

.foreach (var item in collection){} 

Vielen Dank für Ihre Zeit,

Adrian

Antwort

0

Sorry - insgesamt Missverständnis Ihrer Frage.

Mit foreach in Cypher anders zu foreach in C#, was Sie brauchen, ist eine Sammlung von dem, was Sie wollen, durchsuchen,:

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

var idAndEmails = new List<IdAndEmail>{ new IdAndEmail { Id = 1, Address = "[email protected]"} /*etc*/ }; 

Sobald Sie, dass Ihre Chiffre wird:

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

Ich tippe nicht irgendwo ich kann den Code richtig testen, in Bezug auf die Syntax, aber das sollte Sie dahin bringen.

+0

Hallo. Danke für den Kommentar. Tatsächlich liefert die Übereinstimmung wie oben korrekt die Knoten, die der Bedingung entsprechen. wenn ich dann über jeden zurückgegebenen Knoten gehe und eine separate Cypher-Abfrage mache, die diesem einzelnen Knoten entspricht, und rufe .Set auf (".expiry = {now}"). WithParam ("now", DateTime.Now), das Ergebnis ist korrekt . Ich mache jedoch viele Aufrufe an die Datenbank, anstatt die Lösung mit der Idee, die Chiffre foreach im ersten Chiffrierbefehl auszuführen. – user1175362

+0

Cool - in diesem Fall habe ich meine Antwort aktualisiert, um zu sein, was Sie eigentlich gefragt haben :) –

+0

Vielen Dank! Ich werde bis zu ein paar Tagen keine Zeit haben, es zu versuchen, aber vielen Dank :) Ich werde diesen Beitrag aktualisieren, wenn ich es versuche und nochmals danke :) – user1175362

Verwandte Themen