0

我搜索了一种通过使用数据集作为数据库模拟器来创建查询的方法。数据集包含具有主键列的每个表。它也有外键。 模拟数据库 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)
                        )
            )

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


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

这是一个函数

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

1 回答 1

0

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

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

LINQ(语言集成查询)

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

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

另一种选择是 XML 并使用 LINQ 来查询 XML。

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

于 2012-11-14T17:46:50.350 回答