我如何在Neo4jClient中编写这个
本文关键字:Neo4jClient | 更新日期: 2023-09-27 17:50:51
感谢Dave Bennett,我有一个很棒的Neo4j查询,它提供了我需要的结果。我需要让这在Neo4JClient工作。这是我的工作Neo4j查询:
`// Composite Tile with related users
match (t:Tile{summary:"Test 1"})<-[:ASSIGNED_TO]-(u:User)
with {summary: t.summary,
id: t.id,
sprint_id: t.sprint_id,
size: t.size,
percent_done: t.percent_done,
color: t.color_id,
description: t.description,
queue_id: t.queue_id,
swimlane_id: t.swimlane_id,
icons: t.icons,
order: t.order,
assignees: collect(u)} as tile
RETURN collect(tile) as tiles`
Visual Studio和/或Neo4jClient对我的尝试不太满意:
var compositeTile = client.Cypher
.Match("(t:Tile)<-[:ASSIGNED_TO]-(u:User)")
.Where((Tile t)=> t.summary == tile.summary)
.With( {
summary: t.summary,
id: t.id,
sprint_id: t.sprint_id,
size: t.size,
percent_done: tile.percent_done,
color: t.color,
description: t.description,
queue_id: t.queue_id,
swimlane_id: t.swimlane_id,
icons: t.icons,
Order: t.order,
assignees: collect(u)
} as tile)
.return collect(tile) as tiles;
只是抛出了很多红色的弯弯曲曲的线条,我怀疑是因为我没有正确地格式化。with语句。我没能找到一个例子,所以我在这里问。我如何在Neo4jClient中正确地做到这一点?
所以,你的问题有两个答案-第一个是.With
语句以字符串作为参数,所以你只需要用"
(或@"
,如果你想保持格式)包装你的文本。第二个答案对你来说更麻烦:
你想用Neo4jClient
做的事情是不可能的——目前它不允许你创建匿名类型。它不能对内容进行反序列化。我以为这可能是一个快速解决方案,但似乎它会更复杂。我们在这里看到的是查询的变化。
我假设你有一个名为Tile
的类,具有你所追求的属性。所以I会把查询改成这样:
client.Cypher
.Match("(t:Tile)<-[:ASSIGNED_TO]-(u:User)")
.Where((Tile t) => t.summary == tile.summary)
.Return((t,u) => new {
Tile = t.As<Tile>(),
User = u.CollectAs<User>()
});
这将给你一个c#匿名类型与Tile和IEnumerable<Node<User>>
元素,显然你想要的Users
在你的Tile
,所以你可以解析结果:
var tiles = new List<Tile>();
foreach (var result in results)
{
var tile = result.Tile;
foreach (var user in result.Users)
tile.users.Add(user.Data);
tiles.Add(tile);
}
您可能会发现需要初始化Users
集合,因此要么将Users = new List<User>()
添加到Tile
构造函数中,要么在解析数据之前添加。