2009-08-11 44 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