[英]How do I create a relationship between two nodes using C# Neo4jClient?
[英]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__851.<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__871.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.