2010-10-15 42 views
1

假设我有两个表,它们都包含动态列,我希望从两个表中检索所有列的数据行集合(稍后,我将它绑定到网格视图)执行左外连接后。Linq返回连接中所有表的所有列

示例查询:

var query = from TableA in ds.Tables[0].AsEnumerable() 
      join TableB in ds.Tables[1].AsEnumerable() on new { col1 = TableA.Field<Int32>("colA"), col2 = TableA.Field<DateTime>("colB") } 
      equals new { col1 = TableB.Field<Int32>("colA"), col2 = TableB.Field<DateTime>("colB") } 
      into GJ 
      from sub in GJ.DefaultIfEmpty() 
      select TableA; 

问题: 我想选择表A和tableB的一起。上面的示例查询起作用,并在左外连接后填充tableA的所有列。但我希望从两个表中检索所有列。请指教。

回答

2

只要选择两个部分成一个匿名类型:

var query = from TableA in ds.Tables[0].AsEnumerable() 
      join TableB in [ ...] on [...] equals [...] into GJ 
      from sub in GJ.DefaultIfEmpty() 
      select new { RowA = TableA, RowB = sub }; 

结果的每个元素具有两个属性:RowA不同于TableA一排,和RowB不同于TableB空如果匹配的行TableB没有行匹配RowA

+0

感谢您的回答。可以说这些是表A(ColumnA,columnB,ColumnC)的列和TableB的列(ColumnA,ColumnB,ColumnD,ColumnE)。所以我希望提取所有列(ColumnA,ColumnB,ColumnC,ColumnD,ColumnE)的数据收集。输出非常类似于select * from tableA在[..some join ..]上留下了外部连接Tableb ...您可以详细说明如何实现它。 – Alex 2010-10-15 08:46:47

+0

@亚历克斯:那么你*可以*把它们压平在select子句中......但为什么不把这两行分开呢? – 2010-10-15 08:49:35

+0

我的理由:我添加了很多查询(之前没有),大量的AutoMapper地图,而不是很多时间:(。 – 2017-08-02 12:29:32