运算符与 Neo4jClient 的逻辑分组

Logical grouping of operator with Neo4jClient

我似乎无法弄清楚如何使用 Neo4jClient 编写此查询

MATCH (n) 
WHERE (n.Id="1ef17d65-492e-4c0d-aa79-13065edd37f2" AND n.CaseType="NaturalPerson") OR (n.Id="a5c143d4-0306-4057-a96f-e39c5c50eb22" AND n.CaseType="NaturalPerson")
RETURN n

如果我这样写查询

this.client.Cypher.Match("(n)")
                .Where("f.Id=\"1ef17d65-492e-4c0d-aa79-13065edd37f2\"")
                .AndWhere("n.CaseType=\"NaturalPerson\"")
                .OrWhere("f.Id=\"1ef17d65-492e-4c0d-aa79-13065edd37f2\"")
                .AndWhere("n.CaseType=\"NaturalPerson\"")
                .Return((n, r) => n.As<T>());

生成了以下查询,但它没有将两个 and 子句逻辑分组的括号 '(' ')'

MATCH (n)
WHERE f.Id="1ef17d65-492e-4c0d-aa79-13065edd37f2"
AND n.CaseType="NaturalPerson"
OR f.Id="1ef17d65-492e-4c0d-aa79-13065edd37f2"
AND n.CaseType="NaturalPerson"
RETURN n AS Node, r AS Metadata

你要么:

.Where("n.Id='1ef17d65-492e-4c0d-aa79-13065edd37f2' AND n.CaseType='NaturalPerson')
.OrWhere("n.Id='a5c143d4-0306-4057-a96f-e39c5c50eb22' AND n.CaseType='NaturalPerson'")

或者,您可以将所有内容合二为一.Where

但是,如果是我,我会这样做:

.Where("n.CaseType = 'NaturalPerson')
.AndWhere("n.Id IN ['1ef17d65-492e-4c0d-aa79-13065edd37f2','a5c143d4-0306-4057-a96f-e39c5c50eb22']

而且我肯定会使用这样的参数:

var ids = new [] {'a5c143d4-0306-4057-a96f-e39c5c50eb22', '1ef17d65-492e-4c0d-aa79-13065edd37f2'};
var caseType = "NaturalPerson";

this.client.Cypher.Match("(n)")
    .Where("n.CaseType = $caseTypeParam")
    .AndWhere("n.Id IN $idsParam")
    .WithParam("caseTypeParam", caseType)
    .WithParam("idsParam", ids")
    /*.. etc..*/