使用LINQ使用两个键列加入两个数据表

问题描述:

数据表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

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

试试这个代码的朋友:

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