0

データセットをデータベース シミュレータとして使用してクエリを作成する方法を検索します。データセットには、主キー列を持つ各テーブルが含まれています。外部キーもあります。 データベース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を求めます。しかし、同じIDリストを持つTableBまたはCまたはD.が必要な場合があります。


シチュエーション(シミュレーション)

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 の可能性があります。

しかし、私は最大の可能性のクエリを望んでおらず、すべての可能性に使用しています。「colB と colD と colA から id を与えるテーブル A」のクエリを意味します。colA の ID しか持っていない場合は使用しないでください。他のテーブルには大量のデータが含まれている可能性があり、必要なく内部を検索するためです。

アルゴリズムは知っておく必要があります。そこに行く必要がない場合は、必要ありません。

4

1 に答える 1

0

DataSet と DataTable は TSQL をサポートしていません。
TSQL はデータベース エンジンと対話するだけです。

PK、PK FK 関係を定義し、それらの関係をたどることができます。
DataRelations のナビゲート
List にキャストし、LINQ を使用してクエリを実行できます。

LINQ (言語統合クエリ)

または、行を繰り返して等価比較を行うこともできます。

SQL CE は、TSQL をサポートする組み込みデータベースです。

もう 1 つのオプションは XML で、LINQ を使用して XML を照会します。

個人的には、(DataSet ではなく) クラスでこれを行い、gethashcode と equals を上書きします。DataSet は重くて遅いため、コレクションは .NET で長い道のりを歩んできました。
コレクションには HashSet (または KeyedCollection の辞書) を使用します。
結合を表すクラス TblATblD もあり、HashSet を使用します。
ID を Int16 にできる場合は、2 つの Int16 を TblATblD の Int32 にパックできます。
これは、Users Groups と UrsGrp で行います。
ユーザーは特定のフィールドを表示できます。
クエリは、LINQ で話していることのようなものです。

于 2012-11-14T17:46:50.350 に答える