2013-02-22 81 views
2

我有3個表內連接在LINQ的具有多於2個數據表

T1 ==>

t1.ID t1.co1  t1.col2 

1  a   b    
2  a   b 

T2 ==>

t2.ID t2.co1  t2.col2 

    1  a   b    
    2  a   b  

T3 ==>

t3.ID t3.co1  t3.col2 

1  a   b    
2  a   b   

我想使用Linq的所有三個表之間的內部連接,並希望第4個數據表中的選定列。

相當於SQL查詢:

SELECT t1.ID,t2.col1,t3.col2 
    FROM t1 
INNER JOIN t2 ON t1.ID=t2.ID 
INNER JOIN t3 ON t1.ID=t3.ID 

T4 ==>

t1.ID t2.co1  t3.col2 

1  a   b    
2  a   b 

回答

3

像這樣的事情

var Result = 
    from row1 in t1 
    join row2 in t2 on row1.ID equals row2.ID 
    join row3 in t3 on row1.ID equals row3.ID 
    select new { ID = row1.ID, Col1 = row2.col1, Col2 = row3.col2 } 

DataTable dt = Result.CopyToDataTable(); 
+0

(修正了一些語法問題 - 其基本思路是正確的) – 2013-02-22 10:29:24

+0

欲速則不達))謝謝 – Alex 2013-02-22 10:40:08

+0

@voo:感謝烏拉圭回合的答覆:)。我做了幾乎相同,但我怎麼能將VAR結果轉換爲數據表? – 2013-02-22 10:47:05

1

使用LoadDataRow()從一個anonymous類型here得到一個DataTable 。其他Result.CopyToDataTable()

//Get the column list as same as table1 to new datatable 
DataTable table4 = table1.Clone(); 

var Result = 
    from x in t1.AsEnumerable() join 
     y in t2.AsEnumerable() on x.Field<int>("ID") equals y.Field<int>("ID") join 
     z in t3.AsEnumerable() on x.Field<int>("ID") equals z.Field<int>("ID") 
    select new table4.LoadDataRow( 
     new object[] { 
       x.ID, 
       y.col1, 
       z.col2 
      }, false); 
+0

它不適用於選擇「選定的列」。選擇x).CopyToDataTable();它工作正常,但是當新的時候.CopyToDataTable(); - 它不 – 2013-02-22 10:58:00

+1

@WebDevelopmentHurricane,看看更新的答案。 – Kaf 2013-02-22 11:51:45