【问题标题】:query generator by dataset and id list按数据集和 id 列表查询生成器
【发布时间】:2012-11-14 16:58:48
【问题描述】:

我搜索了一种通过使用数据集作为数据库模拟器来创建查询的方法。 数据集包含具有主键列的每个表。它也有外键。 simulate database vb.net

我通过提供键/值列表来搜索创建“位置”部分的方法。

数据集将为空,这是创建查询的指数列表的唯一方法。

示例: 示例:

Table A
colA

Table B
colB
colD

链接者

Table C
colA
colB

Table D
colD

我给列表

[colA] 1
[colA] 2
[colA] 3
[colB] 5
[colB] 6
[colD] 8

我想要查询表 A 中包含列表中指定元素的每个项目。

Select * 
from TableA
where colA in (1,2,3)
and colA in (
            select colA 
            from TableC
            where colB in (5,6)         
            and colB in (
                            select colB
                            from TableB
                            where colD in (8)
                        )
            )

所以我正在搜索算法来创建查询。像任何查询生成器一样工作。


我可以从任何这些表中获取数据。

函数的this

function GetSubQuery(table, list(of keyValue) as string

我的示例要求 TableA。但我可以希望 TableB 或 C 或 D. 具有相同的 id 列表。


情况(模拟)

I want table A,B or D.

I can ask for table A, giving id from colD. 
I can ask for table A, giving id from colB.
I can ask for table A, giving id from colA.
I can ask for table A, giving id from colB and colD.
I can ask for table A, giving id from colB and colA.
I can ask for table A, giving id from colB and colD and colA.

I can ask for table B, giving id from colD.
... 

这里有 18 种可能性。

但我不想查询最大可能性并将其用于所有可能性。 我的意思是查询“表 A,从 colB 和 colD 和 colA 给出 id”。如果您只有 colA 的 id,则不应使用。 因为它可以在另一个表中有很多数据,你会在不需要的情况下搜索。

算法需要知道,如果你不需要去那里,你不需要。

【问题讨论】:

  • 您的查询是否符合您的要求?目前还不清楚问题是什么。
  • “所以我正在搜索算法来创建查询。就像任何查询生成器一样工作。”。无论我放在我的专栏列表中。算法将创建查询。我不想创造每一种可能的方式。因为算法将用于超过 4 个表。
  • 我在问题中添加了很多东西。但这可能让人难以理解。我将对其进行编辑以澄清我的想法。

标签: .net sql dataset


【解决方案1】:

DataSets 和 DataTables 不支持 TSQL。
TSQL 只是与数据库引擎对话。

您可以定义 PK、PK FK 关系并遍历这些关系。
Navigating DataRelations
您可以强制转换为 List 并使用 LINQ 进行查询。

LINQ (Language-Integrated Query)

或者您可以只迭代行并进行相等比较。

SQL CE 是一个支持 TSQL 的嵌入式数据库。

另一个选项是 XML 并使用 LINQ 来查询 XML。

就我个人而言,我会使用类(而不是数据集)并覆盖 gethashcode 和 equals。 数据集既重又慢,在 .NET 中收集已经取得了长足的进步。
对集合使用 HashSet(或 KeyedCollection 字典)。
甚至有代表连接的类 TblATblD 并使用 HashSet。
如果您的 ID 可以是 Int16,那么您可以在 TblATblD 上将两个 Int16 打包成 Int32。
我使用用户组和 UrsGrp 执行此操作。
用户可以看到某些字段。
查询有点像您在 LINQ 中谈论的所有内容。

【讨论】:

  • 我不确定,但就像您认为我想要查询的结果一样。我没有,我需要一种方法来创建 TSQL 查询,因为我有太多的可能性。也许我不明白你的答案。
  • 当您说“No DataSets 和 DataTables 不支持 TSQL”时。我不想将数据集与 tsql 一起使用,我想将其用作链接表的模拟并知道我的 columnList 中列出的列在哪里
  • 好的,那么您应该删除数据集,因为这是我获得 TSQL 的数据库模拟器。是的,你可以用 LINQ 做到这一点。我会在几分钟内更新我的答案。
  • dataRelation 似乎很有趣。我会仔细看看它。坦克你
猜你喜欢
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
相关资源
最近更新 更多