0

我想在两个表之间创建一个连接,结果将包括所有两个表列。我想在不指定特定列名的情况下执行此操作,只需全选,因为我不知道这两个表将包含多少列,也不知道它们的名称。

我只想在两个表之间创建连接,结果将包括两个表列。

我怎么做 ?结果类型应该是什么?

我试过:

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 或将其呈现在 gridview 中。

例如,获取包含 [TrID]、[SP]、[SP2] 列的表,而无需专门创建具有这三列的匿名类型:

表 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

没有办法神奇地合并你的两个表。如果你想要一个新的DataTable,你需要用适当的列创建一个新的,并相应地添加行。或者,您确实可以将匿名类型绑定到控件,但不能使用您当前的两个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为您的数据源并绑定到TrID,SPSP2.

于 2009-08-13T14:05:09.427 回答