我有一个适用于各种系统(例如 Playstation、Atari 2600 等)的 MySQL 游戏数据库。它还包含其他信息,例如替代游戏名称(针对每个地区)和游戏开发商等。
这是通过数据源向导通过表适配器连接到强类型数据集 dbds
。部分表格的屏幕截图如下(直接取自数据集设计者 + 大大简化 - 现实中的表格更多):
(我错过了 gi_system 表,但您明白了要点 - SystemID 位于 gi_game
)
这是一个大型数据集。我想生成一个 xml 文件,其中包含 单独一个系统的所有游戏相关表的数据。然后,我会将其导入到另一个应用程序中,该应用程序具有相同架构的数据集。这基本上允许我一次一个系统地填充该数据集。显然,任何进程都需要将其他数据表中的相关行导出到xml文件中。
导出/导入整个数据集很简单,当然,使用 .writeXML
但是,我对如何实现上述目标感到困惑。
我知道我也可以将其他应用直接连接到 mysql 数据库,但我正在寻找离线解决方案。
我查看了 Linq To Dataset (https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/cross-table-queries-linq-to-dataset),但这似乎只在查询中生成了一个结果“表”。
另一个问题是,如果 Linq 合适,我将如何根据上图中展示的关系结构编写查询。我进入了 JOIN 类型的领域,这有点令人困惑。上面的 linq,如果只是游戏和组织,很简单:
From g in gi_game
Join o in gi_organisation
On g.DeveloperID Equals o.ID
Select new {GameName = g.name, OrgName = o.name}
但是,如果我还想为 gi_gamealtname
拉入表行,如果父子关系颠倒了,我将如何将其写入此查询?此外,这将不得不“达到”另一个步骤来拉入相关的 gi_region
行。]
最终目标是在“接收”应用程序中,我只需执行 GamesDataSet.ReadXML("export.xml") 即可加载特定系统和任何相关表行的所有游戏。
任何帮助表示赞赏。谢谢。
编辑:我只是想 - 我不知道首先对 MySQL 数据库进行查询是否是一个可能的解决方案?即在加载数据集之前对数据执行 SQL 查询。这是双重问题:我不知道如何在应用程序端的代码中执行此操作(我知道如何执行自定义 TableAdapter 查询,但现在是针对数据集),而且问题仍然存在于如何构建解决上述问题的 SQL 查询。