2017-11-17 4 views
0

Ich möchte Artikel der gleichen Marke finden, aber aus einer anderen Kategorie. Und dann ihre IDs zurückgeben.Return-Knoten-Parameter von Neo4j Graphclient Abfrage

In meiner Datenbank habe ich derzeit die folgenden Knoten: Artikel, Marke, Kategorie.

Und Beziehungen: IN_CATEGORY, FROM_BRAND.

Die Artikel haben Eigenschaften: ID, Marke und Kategorie.

Ich habe diese Abfrage erstellt, die das korrekte Ergebnis zurück

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

Ich weiß nicht, ob es möglich ist, mit der Kategorie Eigentum zu vermeiden und stattdessen die IN_CATEGORY Beziehung zu verwenden.

Mein Problem ist jetzt, dass ich die Abfrage mit dem Neo4j Graphclient durchführen möchte.

Inzwischen ich so weit gekommen:

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; 
} 

Sein scheint die richtigen Elemente zurückzukehren. Aber ich möchte den Artikel ids zurückgeben, nicht die ganzen Artikel.

Antwort

0

ich es mit

mit festen
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;