如何从更大的数据集生成过滤的 .net 数据集(包括所有 JOINed 表)?

时间:2021-06-17 18:34:03

标签: c# linq join filter dataset

我有一个适用于各种系统(例如 Playstation、Atari 2600 等)的 MySQL 游戏数据库。它还包含其他信息,例如替代游戏名称(针对每个地区)和游戏开发商等。 这是通过数据源向导通过表适配器连接到强类型数据集 dbds。部分表格的屏幕截图如下(直接取自数据集设计者 + 大大简化 - 现实中的表格更多):

enter image description here

(我错过了 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 查询。

0 个答案:

没有答案