Reputation: 143
I'm using the code below in an attempt to Call TimeTree from Neo4jClient.
Other simple Calls work, but this one just does nothing. No errors, but also no new time object.
public class Trip
{
public long Id { get; set; }
public string Name { get; set; }
}
public class UUID
{
public long Value { get; set; }
}
public class TimeStamp
{
//public long Id { get; set; }
//public string Name { get; set; }
public long time { get; set; }
}
public class User
{
public long Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
}
class Program
{
static void Main(string[] args)
{
var client = new Neo4jClient.GraphClient(new Uri("http://localhost:7474/db/data"), "neo4j", "password");
client.Connect();
client.Cypher
.Match("(n)")
.DetachDelete("n")
.ExecuteWithoutResults();
var newUser = new User { Id = 456, Name = "Jim" };
client.Cypher
.Create("(user:User {newUser})")
.WithParam("newUser", newUser)
.ExecuteWithoutResults();
var newTrip = new Trip { Id = 001, Name = "Antibes" };
client.Cypher
.Match("(traveller:User)")
.Where((User traveller) => traveller.Id == 456)
.Create("(traveller)-[:TRAVELLING]->(travelling:Trip {newTrip})")
.WithParam("newTrip", newTrip)
.ExecuteWithoutResults();
var tstamp = client.Cypher
.Match("(trip:Trip)")
.Where((Trip trip) => trip.Name == "Antibes")
.With("trip AS tripToLink")
.Call("ga.timetree.events.attach({ node: 'tripToLink', time: 1483828451000, relationshipType: \"ARRIVING_ON\"})")
.Yield("node")
.Return(node => new { TimeStamp = node.As<TimeStamp>() });
The following does work in the Shell:
MATCH (trip:Trip)
WHERE trip.Name = "Antibes"
WITH trip
CALL ga.timetree.events.attach({node: trip, time: 1483828451000 , relationshipType: "ARRIVING_ON"})
YIELD node RETURN node
Upvotes: 0
Views: 116
Reputation: 6280
First off - good work on putting all the code there, it made life a lot easier!
I believe the problem here is two fold: the tstamp
variable you have is of type: ICypherFluentQuery<???>
(I'm using '?' to represent the anonymous type you're creating) - so you need to actually get the results to get any response. Until you call .Results
you don't actually execute the query.
Typically, I like to create the query as you have and then execute after:
var tstamp = client.Cypher....
/* rest of the query here */
var tStampResults = tstamp.Results;
When you do this you'll probably get an error:
BadInputException: java.lang.String cannot be cast to org.neo4j.graphdb.Node
If you look at your response from the query you run in the console - you'll see you actually get back:
╒═══════════════════════════╕
│"node" │
╞═══════════════════════════╡
│{"Id":"1","Name":"Antibes"}│
└───────────────────────────┘
and that's because you are YIELD
ing node
, so you'll only be able to cast to Trip
type:
var query = client.Cypher
.Match("(trip:Trip)")
.Where((Trip trip) => trip.Name == "Antibes")
.With("trip")
.Call("ga.timetree.events.attach({node: trip, time: 1483828451000 , relationshipType: \"ARRIVING_ON\"})")
.Yield("node")
.Return(node => node.As<Trip>()); //<-- Change here
Upvotes: 1