繁体   English   中英

使用Neo4jClient C#按关系属性排序

[英]Ordering By Relationship Property Using Neo4jClient C#

我想在C#中获得以下查询:

match(p:Person)-[r1:HAS]->(s:Shelf) 
optional match(s)-[r2:CONTAINS]->(l:Link) return p,s,l 
order by r2.time_modified;

我最初考虑过,但是没有用:

var result = await this._graphClient.Cypher
                 .Match("(person:Person { person_id: {personId}})-[r1:HAS]->(shelf:Shelf)")
                 .OptionalMatch("(shelf)-[r2:CONTAINS]->(link:Link)")
                 .WithParams(new { personId = personId })
                 .Return((shelf, link) => new 
                  {
                     Shelf = shelf.As<Shelf>(),
                     Links = link.CollectAs<Link>()
                  })
                 .OrderBy("r2.time_modified")
                 .ResultsAsync;

我得到以下未定义r2的异常

未定义r2 ...“按r2.time_modified命令”

使用Neo4jClient C#驱动程序相对较新。 谁能帮助我,向我解释发生了什么事? 我也想知道如何实现这一目标。

这是堆栈跟踪:

在System.Threading.Tasks.Task 1.System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task 1.get_Result(get)在Neo4jClient.GraphClient。<> c__85 1.<PrepareCypherRequest>b__85_1(Task在System.Threading.Tasks.ContinuationResultTaskFromResultTask的D:\\ temp \\ d298ce3 \\ Neo4jClient \\ GraphClient.cs:line 961中的1.<PrepareCypherRequest>b__85_1(Task 1响应)2.在System.Threading.Tasks.Task.Execute的2.InnerInvoke() at System.Threading.Tasks.Task.Execute() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable 1.ConfiguredTaskAwaiter.GetResult()在Neo4jClient.GraphClient.d__87 1.MoveNext() in D:\\temp\\d298ce3\\Neo4jClient\\GraphClient.cs:line 1022 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter 1.MoveNext() in D:\\temp\\d298ce3\\Neo4jClient\\GraphClient.cs:line 1022 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter 1.GetResult()在...存储库。 C:\\ Users \\ Williams \\ documents \\ visual studio 2015 \\ Projects ... \\ Repository \\ Neo4jRepository.cs:line 358中的Neo4jRepository.d__23.MoveNext()

因为您在Return语句中执行Collect ,所以r2不再存在。

您需要订购后才能返回:

var query = gc.Cypher
    .Match("(p:Person { person_id: 'a'})-[r1:HAS]->(s:Shelf)")
    .OptionalMatch("(s)-[r2:CONTAINS]->(l:Link)")
    .With("p,s,l")
    .OrderBy("r2.time_modified")
    .Return((p,s,l) => new
    {
         Person = p.As<Person>(),
         Shelf = s.As<Shelf>(),
         Links = l.CollectAs<Link>()
    });
var res = query.Results;

您需要先返回r2.time_modified,然后才能按顺序订购结果。

match(p:Person)-[r1:HAS]->(s:Shelf) 
optional match(s)-[r2:CONTAINS]->(l:Link) 
return p,s,l,r2.time_modified
order by r2.time_modified;

如果返回,则可以将其用于ORDER BY。

[编辑]

未经测试:

var result = await this._graphClient.Cypher
                 .Match("(person:Person { person_id: {personId}})-[r1:HAS]->(shelf:Shelf)")
                 .OptionalMatch("(shelf)-[r2:CONTAINS]->(link:Link)")
                 .WithParams(new { personId = personId })
                 .Return((shelf, link, r2) => new 
                  {
                     Shelf = shelf.As<Shelf>(),
                     Links = link.CollectAs<Link>()
                  })
                 .OrderBy("r2.time_modified")
                 .ResultsAsync;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM