2016-04-14 124 views
1

數據表A:使用LINQ使用兩個鍵列加入兩個數據表

Key1 | Key2 | A |乙

[1 1 ...]

[1 2 ...]

數據表B:

密鑰1 | Key2 | x | Ÿ

[11 ...]

[1 2]

期望的結果:

鍵1 | Key2 | A | B | X | ÿ

[1 1 ...]

[1 2 ...]

在最終的結果列A,B,X和Y已被添加到該新數據表。發生這種情況是因爲key1和key2在數據表A和B中都是相等的。如果給定條件 - (Key1和Key2是euqal),完全外部連接是可能的嗎?

+1

你可以把數據放在你的數據表中嗎?對不起,我還沒有完全遵循 – Shyju

+0

也許一個T-SQL的例子說明你如何在數據庫中做到這一點,這將有助於理解問題並闡明答案。 – CodingGorilla

+0

@Shyju我在上面,還沒有找到正確格式化的方法。 – Iason

回答

1
var list1 = (from t1 in dataTable1.AsEnumerable() 
       select new 
       { 
        Key1 = t1.Field<int>("Key1"), 
        Key2 = t1.Field<int>("Key2"), 
        A = t1.Field<string>("A"), 
        B = t1.Field<string>("B") 
       }); 

var list2 = (from b in dataTable2.AsEnumerable() 
       select new 
       { 
        Key1 = b.Field<int>("Key1"), 
        Key2 = b.Field<int>("Key2"), 
        X = b.Field<string>("X"), 
        Y = b.Field<string>("Y") 
       }); 

// Now join the 2 collections and get the result you want. 

var result = (from x in list1 
       join y in list2 on new { x.Key1,x.Key2} equals new { y.Key1,y.Key2 } 
       select new { A = x.A, X = y.X }).ToList(); 

假設鍵1和鍵2是int型和A·B,X和Y是string型。

+0

'AsEnumerable'不會從數據庫加載所有內容嗎? –

+0

'dataTable1'已經存在於數據的內存中。禮拜? – Shyju

+0

從msdn **除了將編譯時類型的源從實現IEnumerable 的類型更改爲IEnumerable 本身之外,AsEnumerable (IEnumerable )方法不起作用。** – Shyju

1

試試這個代碼的朋友:

var req = (from A in DatatableA 
     join B in DatatableB 
     on A.Key1 
      equals B.Key1 into DatatableResult 
      select new 
      { 
        Key1 = A.Key1 , 
       Key2 = A.Key2 , 
       A= A.A , 
       x= B.x , 
       y= B.y , 

      }).ToList(); 
+0

謝謝。我怎樣才能做到這一點與空表?說表A是空的,B和我的問題一樣。我如何得到與上述問題相同的結果表? – Iason