2009-08-11 60 views
0

我想创建两个表之间的连接,并且结果将包括所有的两个表列。 我想这样做,而不指定具体的列名称,只是做全选,因为我不知道这两个表包括多少列,并不知道他们的名字。linq到数据集的两个表之间的连接

我只想创建两个表格之间的连接,并且结果将包含两个表格列。

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

我想:

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中,数据集或GridView中出现任何事情。

例如,得到一个表中的列[论坛报],[SP],[SP2]而不specificly创建匿名类型与这些三列:

表1 论坛报SP Asaf1 Asaf2 F1 K2 Asaf1 D2 H1 F1

表2
论坛报SP2 Asaf1 Dor2 Asaf1 U1 R1 W1 I1 Y3

回答

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为您的数据源并绑定到TrIDSPSP2