0

2 つのテーブル間の結合を作成し、結果に 2 つのテーブルの列がすべて含まれるようにしたいと考えています。特定の列名を指定せずにこれを行いたいのですが、2 つのテーブルに含まれる列の数がわからず、それらの名前がわからないため、すべてを選択するだけです。

2 つのテーブル間に結合を作成し、結果に両方のテーブル列が含まれるようにしたいだけです。

それ、どうやったら出来るの ?結果の型は何ですか?

私は試した:

var res = from t1 in ds1.Tables["Table1"].AsEnumerable()
           join
          t2 in ds1.Tables["Table2"].AsEnumerable()
           on t1.Field<string>("TrID") equals t2.Field<string>("TrID")
                select new { t1, t2 };

しかし、私は何もできない結果として奇妙な型を取得します。それをdataTable、Datasetに変換したり、グリッドビューに表示したりすることはできません。

たとえば、列 [TrID]、[SP]、[SP2] を持つテーブルを取得するには、これら 3 つの列を持つ匿名型を特に作成しません。

表 1 TrID SP Asaf1 Asaf2 F1 K2 Asaf1 D2 H1 F1

表 2 TrID SP2 Asaf1
Dor2 Asaf1 U1 R1 W1 I1 Y3

4

1 に答える 1

0

2 つのテーブルを魔法のようにマージする方法はありません。新しいDataTableが必要な場合は、適切な列で新しい を作成し、それに応じて行を追加する必要があります。または、実際に匿名型をコントロールにバインドできますが、現在の匿名型の 2 つのDataRowプロパティにはバインドできません。代わりに、必要なフィールドを抽出する必要があります。

var res = from t1 in ds1.Tables["Table1"].AsEnumerable()
          let id = t1.Field<string>("TrID")
          join t2 in ds1.Tables["Table2"].AsEnumerable()
            on id equals t2.Field<string>("TrID")
                select new {
                    TrID = id,
                    SP = t1.Field<string>("SP"),
                    SP2 = t2.Field<string>("SP2")
                };

次に、データソースとして設定し、 、およびresにバインドできます。TrIDSPSP2

于 2009-08-13T14:05:09.427 に答える