从Neo4j graphclient查询返回节点参数

时间:2017-11-17 09:46:00

标签: c# neo4j cypher neo4jclient

我想从同一品牌中找到不同类别的商品。 然后返回他们的身份。

在我的数据库中,我目前有以下节点:项目,品牌,类别。

关系:IN_CATEGORY,FROM_BRAND。

项目具有属性:id,品牌和类别。

我创建了这个查询,返回正确的结果

MATCH (i1:Item {Id:"5"})-[r1:FROM_BRAND]->(b:Brand)<-[r2:FROM_BRAND]-(i2:Item) 
WHERE i1.category <> i2.category 
RETURN i2.Id

我不知道是否可以避免使用category属性而是使用IN_CATEGORY关系。

我现在的问题是我想使用Neo4j graphclient执行查询。

到现在为止,我走到了这一步:

public IEnumerable<string> GetIds(string itemId){
  var query = _client.Cypher
    .Match("(i1: Item)-[r:FROM_BRAND]->(b:Brand)<-[rr:FROM_BRAND]-(i2:Item)")
    .Where((Item i1) => i1.id == itemId)
    .AndWhere((Item i1, Item i2) => v1.category != i2.category)
    .Return(i2 => i2.As<Item>());

  return query.Results;
}

它似乎返回正确的项目。但我想返回项目ID,而不是整个项目。

1 个答案:

答案 0 :(得分:0)

我用WITH

修复了它
var query = _client.Cypher
    .Match("(i1: Item)-[r:FROM_BRAND]->(b:Brand)<-[rr:FROM_BRAND]-(i2:Item)")
    .Where((Item i1) => i1.id == itemId)
    .AndWhere((Item i1, Item i2) => i1.category != i2.category)
    .With("i2.id AS iId")
    .Return(iId => iId.As<string>());

    return query.Results;