按数据集和id列表查询生成器

时间:2012-11-14 16:58:48

标签: .net sql dataset

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

我通过给出一个Key / Value列表来搜索创建“Where”部分的方法。

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

样品: 样品:

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,则不应使用。 因为它可以在另一个表中包含大量数据,您将在不需要的情况下搜索内部。

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

1 个答案:

答案 0 :(得分:0)

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

你可以定义PK,PK FK关系,然后走这些关系 Navigating DataRelations
您可以强制转换为List并使用LINQ进行查询。

LINQ (Language-Integrated Query)

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

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

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

我个人会用类(不是DataSets)和覆盖gethashcode和equals来做这件事。 数据集繁重而且速度慢,收集在.NET中已经走过了漫长的道路 使用HashSets(或KeyedCollection字典)作为集合 甚至有代表连接的类TblATblD并使用HashSet 如果您的ID可以是Int16,那么您可以在TblATblD上将两个Int16打包到Int32中 我使用Users Groups和UrsGrp执行此操作 用户可以看到某些字段 查询类似于你在LINQ中所讨论的内容。