Search code examples
neo4jneo4jclient

Neo4jClient : C# query to fetch collection with multiple columns


How one can fetch multiple columns data using neo4jClient -

For eq. the example shown on link

Cyper query to fetch multiple column collection

The sample shown above passes properties of event node for collection instead of complete event node.

The query I am constructing takes few properties from the event node and few properties from the relation.

For eq. The relation attribute "registerd_on" needs to be added. So how to pass multiple properties for collection ?


Solution

  • It's not very nice, but if you look at what is returned by doing a collection you get an array of arrays, but these arrays don't have properties as such, so you can only really parse them as string.

    Using the :play movies dataset as a base:

    var query = gc.Cypher
        .Match("(p:Person {name:'Tom Hanks'})-->(m:Movie)")
        .With("p, collect([m.title, m.released]) as collection")
        .Return((p, collection) => new
        {
            Person = p.As<Person>(),
            Collection  = Return.As<IEnumerable<IEnumerable<string>>>("collection")
    
        });
    

    where Person is :

    public class Person
    {
        public string name { get; set; }
    }
    

    You can then access the data like so:

    foreach (var result in results)
    {
        Console.WriteLine($"Person: {result.Person.name}");
        foreach (var collection in result.Collection)
        {
            foreach (var item in collection)
            {
                Console.WriteLine($"\t{item}");
            }
        }
    }
    

    which is not nice :/