How to use the int[] in where IN clause in Cypher Query (using C#)

Viewed 49

I have this cypher query

int[] pIds = new int[] {101, 012}; 
var query = _graphClient.Cypher.Read
            .OptionalMatch($"(p: {Labels.PERSON})")
            .Where($"p.Id IN [{pIds}]") 
            .Return<Person>(p);

On debugging it looks like this:

OPTIONAL MATCH (p: Person)
WHERE p.Id IN [System.Int32[]] 
RETURN distinct p

The values that I should pass in this where clause [101, 012], but its not. Because pIds[0] = 101, pIds[1] = 012 - and its never read in the cypher query.

Where am I going wrong and its failing to pass the values? How should I pass the int[] in the Where IN...

2 Answers

Best is probably to use parameters :

int[] pIds = new int[] {101, 012}; 
var query = _graphClient.Cypher.Read
            .OptionalMatch($"(p: {Labels.PERSON})")
            .Where($"p.Id IN $pIds") 
            .Return<Person>(p)
            .WithParam("pIds", pIds);

I resolved it by getting the int[] into one string seperated by ,

var param = string.Join(",", myIntList); 

var query = _graphClient.Cypher.Read
            .OptionalMatch($"(p: {Labels.PERSON})")
            .Where($"p.Id IN $param") 
            .Return<Person>(p)
            .WithParam("param", param)
Related