2013-02-22 82 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