我能够在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
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
有没有办法启用日志记录来查看Neo4jCLient中发生了什么?
答案 0 :(得分:1)
发现问题,感谢小提琴手。问题与我使用IN子句
的方式有关.AndWhere("prodType.InternalId IN [{shippedProducts}]")
那里有额外的[]导致查询返回零行。