2012-10-30 52 views
0

如何使用linq從兩個表垂直連接行,我已經寫了一個查詢,但它添加到第一行旁邊因此我得到列數雙,但我想按下一行連接。C#數據表如何使用linq垂直連接兩個錶行

var dd4 = from tbl in dataTb.AsEnumerable() 
         join dpi in rawDataTable.AsEnumerable() on tbl["Account_No"] equals dpi["Account_No"] 
         select tbl.ItemArray.Concat(dpi.ItemArray).ToArray(); 

它給我結構是怎樣的

COL1 COL2 COL3 .... col24但只有12列我的表,以便將它添加在它旁邊,但我怎麼能在12列添加結束,然後新行應開始。

dataTb表中的數據:

chNo Chunit val1 val2 val3 val4 
1 kwh 2010 2011 2012 2009 
2 kvarh 2012 2011 2008 2009 

rawDataTable數據:

chNo Chunit val1 val2 val3 val4 
1 kw  2.2 2.1 2.1 2.0 
2 kvar 1.2 1.1 1.1 1.0 

它加入這樣的:

1 kwh 2010 2011 2012 2009 1 kw  2.2 2.1 2.1 2.0 
1 kwh 2010 2011 2012 2009 2 kvar 1.2 1.1 1.1 1.0 
2 kvarh 2012 2011 2008 2009 1 kw  2.2 2.1 2.1 2.0 
2 kvarh 2012 2011 2008 2009 2 kvar 1.2 1.1 1.1 1.0 

,但我想是這樣的:

1 kwh 2010 2011 2012 2009 
1 kw  2.2 2.1 2.1 2.0 
2 kvar 1.2 1.1 1.1 1.0 
2 kvarh 2012 2011 2008 2009 
1 kw  2.2 2.1 2.1 2.0 
2 kvar 1.2 1.1 1.1 1.0 

目前「M得到:但要像上述(對於Yograj)

1 kwh 2010 2011 2012 2009 
2 kvarh 2012 2011 2008 2009 
1 kw  2.2 2.1 2.1 2.0 
2 kvar 1.2 1.1 1.1 1.0 
1 kw  2.2 2.1 2.1 2.0 
2 kvar 1.2 1.1 1.1 1.0 

感謝, @nag。

+0

您可以提供樣品輸入和預期輸出嗎? –

+0

你能說清楚你想得到什麼嗎?在rawDataTable中顯示數據並顯示你想獲得的數據。 –

+1

爲什麼不試試'DataTable.Merge'? –

回答

0

你應該嘗試此查詢

var dd4 = from tbl in dataTb.AsEnumerable() 
      join dpi in rawDataTable.AsEnumerable() 
      on tbl["Account_No"] equals dpi["Account_No"] 
      select new {datarows = new []{ tbl, dpi}}; 

var resultDataTable = dd4.SelectMany(x=>x.datarows).CopyToDataTable(); 

您可以從第二個從第一個實現重複的,但不是。

var resultDataTable = dd4.Select(x=>x.datarows.First()).Distinct() 
         .Concat(dd4.Select(x=>x.datarows.Last())) 
         .CopyToDataTable(); 

試試這個您想要的輸出

var records = from x in dd4 
       group x by x.datarows.First() into y 
       select y; 

List<DataRow> rows = new List<DataRow>(); 

foreach(var item in records) 
{ 
    rows.Add(item.Key); 
    rows.AddRange(item.ToList().Select(x=>x.datarows.Last())); 
} 

var resultDataTable = rows.CopyToDataTable(); 

希望這將有助於。

+0

其工作,但它有兩次重複kwh和kvarh,但我只想要一個如何忽略它? – nag

+0

不,它適用於所有行,但我只需要一個kwh和一個kvarh。 – nag

+0

它會得到不同的第一個表的行,但也失去了第二個表的重複值。 – nag