为什么Neo4j Client不会返回数据,但Cypher窗口会返回数据

时间:2013-11-24 09:56:05

标签: neo4j neo4jclient

我能够在Neo4J浏览器上获得相同的查询工作,但Neo4JClient不返回任何数据。

这是Neo4JClient中的一个错误吗?

这是我在Neo4JClient中的c#代码

            //Define Load warehouse relationship
            string createQry = "(user)<-[:PUBLISHED_BY]-(load:Shipment {shipmentData})<-[:HAS_PUBLISHED]-(shipper),(addr)<-[:HAS_ADDRESS {Type: 'PICKUP'}]-(load)-[:SHIPPED_FROM]->(whse), " +
                //Define the dates on the load
                "(publishDay)<-[:PUBLISHED_ON]-(load)-[:HAS_PICKUP_DATE]->(pickup), (load)-[:HAS_DELIVER_BY_DATE]->(deliverBy), " +
                //Define various constraints on the load
                "(vehCat)<-[:DEFINES]-(const:Constraint {constraintData})<-[:HAS_CONSTRAINT]-(load)-[:HAS_PRODUCT_TYPE]->(prodType)";

            var qry = GraphClient.Cypher
                .Match("(user:Person)<-[:HAS_EMPLOYEE]-(wf)<-[:HAS_WORKFORCE]-(shipper:Shipper),(shipper)-[:HAS_WAREHOUSE]->(whse:Warehouse)-[:HAS_ADDRESS]-(addr), (vehCat:VehicleCategory), (prodType:ProductType) ")
                .Where("user.InternalId ={userId}")
                .AndWhere("whse.InternalId = {pickupWhseId}")
                .AndWhere("vehCat.InternalId = {categoryId}")
                .AndWhere("prodType.InternalId IN [{shippedProducts}]")
                .WithParams(new {
                    userId = currentUserId,
                    pickupWhseId = shipment.ShippedFrom.InternalId,
                    categoryId = shipment.VehicleCategory.InternalId,
                    shippedProducts = prodInClause
                })
                .With("user, shipper, whse, addr, vehCat, prodType")
                .Start(new { publish = publishDay, pickup = pickupDay, deliverBy = deliverByDay })
                .CreateUnique(createQry)
                .WithParams(
                new { 
                    shipmentData = loadData, 
                    constraintData = constraint
                })
                .Return((load, shipper)=> new 
                    {
                        load = load.Node<model.Publishing.Shipment>(),
                        shipper = shipper.Node<model.Publishing.Shipper>()
                    });

            var qryResult = qry.Results.Single(); //THROWS ERROR!!
            var shipmentNode = qryResult.load;
            var shipperNode = qryResult.shipper;

根据Neo4JClient的qry.Query.QueryText

导致以下cypher查询
MATCH (user:Person)<-[:HAS_EMPLOYEE]-(wf)<-[:HAS_WORKFORCE]-(shipper:Shipper),(shipper)-[:HAS_WAREHOUSE]->(whse:Warehouse)-[:HAS_ADDRESS]-(addr), (vehCat:VehicleCategory), (prodType:ProductType) 
WHERE user.InternalId ={userId}
AND whse.InternalId = {pickupWhseId}
AND vehCat.InternalId = {categoryId}
AND prodType.InternalId IN [{shippedProducts}]
WITH user, shipper, whse, addr, vehCat, prodType
START publish=node({p4}), pickup=node({p5}), deliverBy=node({p6})
CREATE UNIQUE (user)<-[:PUBLISHED_BY]-(load:Shipment {shipmentData})<-[:HAS_PUBLISHED]-(shipper),(addr)<-[:HAS_ADDRESS {Type: 'PICKUP'}]-(load)-[:SHIPPED_FROM]->(whse), (publishDay)<-[:PUBLISHED_ON]-(load)-[:HAS_PICKUP_DATE]->(pickup), (load)-[:HAS_DELIVER_BY_DATE]->(deliverBy), (vehCat)<-[:DEFINES]-(const:Constraint{constraintData})<-[:HAS_CONSTRAINT]-(load)-[:HAS_PRODUCT_TYPE]->(prodType)
RETURN load AS load, shipper AS shipper

但是当执行以下代码“qry.Results.Single();”时,我得到一个异常,因为没有返回任何结果。我将相同的查询复制到Neo4J查询窗口并调整参数,并在该屏幕上返回数据,如下所示。

查询:

MATCH (user:Person)<-[:HAS_EMPLOYEE]-(wf)<-[:HAS_WORKFORCE]-(shipper:Shipper),(shipper)-[:HAS_WAREHOUSE]->(whse:Warehouse)-[:HAS_ADDRESS]-(addr), (vehCat:VehicleCategory), (prodType:ProductType)    
WHERE user.InternalId =2 AND whse.InternalId = 999991 AND vehCat.InternalId = 101 AND prodType.InternalId IN [6,7]   
WITH user, shipper, whse, addr, vehCat, prodType   
START publish=node(605), pickup=node(606), deliverBy=node(608)   
CREATE UNIQUE (user)<-[:PUBLISHED_BY]-(load:Shipment { DeliveryByDate:'12/3/2013 6:30:00 PM +00:00', PickupDate: '11/26/2013 6:30:00 PM +00:00', TotalVehiclesNeeded:'3', TotalWeightShipped:'45' })<-[:HAS_PUBLISHED]-(shipper),(addr)<-[:HAS_ADDRESS {Type: 'PICKUP'}]-(load)-[:SHIPPED_FROM]->(whse), (publishDay)<-[:PUBLISHED_ON]-(load)-[:HAS_PICKUP_DATE]->(pickup), (load)-[:HAS_DELIVER_BY_DATE]->(deliverBy), (vehCat)<-[:DEFINES]-(const:Constraint { ConstraintType:'LoadingConstraint', IsHardConstraint:'false'} )<-[:HAS_CONSTRAINT]-(load)-[:HAS_PRODUCT_TYPE]->(prodType)   
RETURN load AS load, shipper AS shipper

enter image description here

有没有办法启用日志记录来查看Neo4jCLient中发生了什么?

1 个答案:

答案 0 :(得分:1)

发现问题,感谢小提琴手。问题与我使用IN子句

的方式有关
.AndWhere("prodType.InternalId IN [{shippedProducts}]")

那里有额外的[]导致查询返回零行。