【发布时间】:2015-07-03 17:40:48
【问题描述】:
我有一个包含以下实体的 Neo4J 图形数据库:
(game)-[:has]->(gamePlayerMapping)-[:mappingFor]->Player
所以实际上我有一个实体游戏和一个实体玩家。这些实体之间存在多对多关系。
实体 GamePlayerMapping 也可以链接到其他实体。这就是为什么它必须是一个节点本身。
在我的 c# 代码中,我有三个对应的类:
- Game.cs
- Player.cs
- GamePlayerMapping.cs
现在我想加载一个包含所有相应 gamePlayerMappings 和相应 Players 的游戏。
使用 Neo4JClient,我的查询代码如下所示:
var x = _client.Cypher
.Match("(game:Game {GameId: '" + id + "'})")
.OptionalMatch("(game)-[has]->(gamePlayerMapping:GamePlayerMapping)-[:mappingFor]->(player:Player)")
.Return((game, gamePlayerMapping, player) => new
{
Game = game.As<Game>(),
Mappings = gamePlayerMapping.CollectAs<GamePlayerMapping>(),
Players = player.CollectAs<Player>(),
}
)
.Results;
查询工作正常,我得到一个具有以下属性的对象:
- 一个游戏对象
- GamePlayerMapping 对象列表
- 播放器对象列表
所以这是我的问题:
如何知道 Players-List 中的哪些 Player-Objects 属于对应列表中的哪个 GamePlayerMapping?
我可以假设索引 0 的玩家属于索引 0 的映射等等吗?听起来很脏。
当然,如果遇到这样的情况,这种方法将不再有效:
(entity1)-[:hasMany]->(entity2)-[:hasMany]->(entity3)
【问题讨论】:
标签: c# neo4j neo4jclient