如何在Neo4jClient中进行左连接,

时间:2016-04-16 16:29:32

标签: neo4j left-join neo4jclient

我有以下查询在neo4j中工作正常,

MATCH (p:Product)
OPTIONAL MATCH
(p)-[r2:SCP_HAS_SCMVSV]-(pv:ProductSCMVSValue)
OPTIONAL MATCH
(pv)-[r3:SCMVS_IN_SCPS]-(ps:ProductStorage)
OPTIONAL MATCH
(pv)-[r5:SCP_HAS_SCPP]-(pp:ProductPrice)
return p,r2 is null,pv,pp,ps

当我将查询转换为neo4jclient时,它是这样的:

var retxx = client.Cypher
             .Match("(sc:ProductSpecCategory)-[r:SCMVS_IN_SC]-(p:Product)").
             OptionalMatch("(p)-[r2:SCP_HAS_SCMVSV]-(pv:ProductSCMVSValue)").
             OptionalMatch("(pv)-[r3:SCMVS_IN_SCPS]-(ps:ProductStorage)").
             OptionalMatch("(pv)-[r5:SCP_HAS_SCPP]-(pp:ProductPrice)")
              .Where("sc.Id = {param2}").WithParam("param2", scId)
         .ReturnDistinct((p, pp, pv) => new
         {
             CurrentValues = pv.CollectAs<ProductSCMultiValueSpecValue>(),
             CurrentPrice = pp.CollectAs<ProductPrice>(),
             CurrentProduct = p.As<Product>(),
         }).Results.ToList();

如何将(r2为空)放入.ReturnDistinct((p,pp,pv)或者它是错误的方式?

1 个答案:

答案 0 :(得分:0)

要获得r2 IS NULL位,您应该使用Return.As方法:

.ReturnDistinct((p, pp, pv) => new
{
    CurrentValues = pv.CollectAs<ProductSCMultiValueSpecValue>(),
    CurrentPrice = pp.CollectAs<ProductPrice>(),
    CurrentProduct = p.As<Product>(),
    R2IsNull = Return.As<bool>("r2 IS NULL")
})