首页 > 解决方案 > 如何从更大的数据集中生成过滤的 .net 数据集(包括所有 JOINed 表)?

问题描述

我有一个用于各种系统(例如 Playstation、Atari 2600 等)的游戏 MySQL 数据库。它还保存其他信息,例如替代游戏名称(针对每个区域)和游戏开发者等。这通过 DataSource 向导通过 tableadapter 连接到强类型数据集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查询解决了上述问题。

标签: c#linqjoinfilterdataset

解决方案


推荐阅读