Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

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

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...


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...