2016-03-15 2 views
1

Я прочитал много вопросов на эту тему и создал следующий почти динамический запрос:Создание динамического запроса с использованием Neo4j клиента

var resQuery = WebApiConfig.GraphClient.Cypher 
       .Match("(movie:Movie {title:{title}})") 
       .WithParam("title", title) 
       .Return(() => new { 
        movie = Return.As<string>("movie.title") 
       }).Results; 

К сожалению, это не является динамическим, так как я объявляю свойство кино в Return анонимного тип.

Во всех примерах, которые я нашел единственный вариант, чтобы вернуть узлы как объект соответствует свойств узла, как: movie = Return.As<string>("movie.title")

Я хочу возвращенную заявление, чтобы дать мне обратно список пар ключ-значение все свойства узла (это может быть в любом представлении, таком как JSON и т. д.), так как мои узлы являются универсальными, а не из определенного типа объекта каждый раз.

это возможно?

ответ

2

Вы можете сделать что-то вроде этого:

var resQuery = WebApiConfig.GraphClient.Cypher 
    .Match("(movie:Movie {title:{title}})") 
    .WithParam("title", title) 
    .Return(() => Return.As<Node<Dictionary<string,string>>>("movie")); 

var results = resQuery.Results.Select(r => r.Data); 
Console.WriteLine(results.First()["title"]); 

С другой стороны, что-то вроде:

var resQuery = WebApiConfig.GraphClient.Cypher 
    .Match("(movie:Movie {title:{title}})") 
    .WithParam("title", title) 
    .Return(() => Return.As<Node<string>>("movie")); 

var results = resQuery.Results; 
List<dynamic> nodes = results.Select(r => JsonConvert.DeserializeObject<dynamic>(r.Data)).ToList(); 
Console.WriteLine(nodes[0].title); 
+0

Спасибо! Что делать, если я хочу добавить больше возвращаемых значений? , например. 'cast = Return.As > (" collect ([person.name, head (split (lower (type (r)), '_')), r.roles]) ")' –

+0

@DorCohen do вы имеете в виду как '.Return ((x, y, z) => new {X = x.As <>(), Y =' и т. д. –

+0

Но это испортит динамику, можно ли возвращать несколько узлов? что-то вроде: '.Return (() => Return.As (" movie, collect ([person.name, head (split (lower (type (r)), '_')), r.roles]) ")); ' –

Смежные вопросы