我通过使用数据集作为数据库模拟器来搜索创建查询的方法。 数据集包含具有主键列的每个表。它也有外键。 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,则不应使用。 因为它可以在另一个表中包含大量数据,您将在不需要的情况下搜索内部。
算法需要知道,如果你不需要去那里,你就不会。答案 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中所讨论的内容。