2012-10-25 27 views
2

我在C#中的數據表有兩列轉換多行成一個DataTable中

State Region 
A  1 
A  2 
B  3 
B  4 

我想實現的是

State Region 
A  1,2 
B  3,4 

這是可能在C#中使用單個LINQ查詢?

我不擅長LINQ,也不想通過循環表來達到目的。

回答

1
var result = dataTable.AsEnumerable() 
      .GroupBy(row => row.Field<string>("State")) 
      .Select(g => 
       { 
        var row = dataTable.NewRow(); 
        row.ItemArray = new object[] 
        { 
         g.Key, 
         string.Join(",", 
            g.Select(r => r.Field<string>("Region"))) 
        }; 

        return row; 
       }).CopyToDataTable(); 
+0

Cuong Le:謝謝你的單線解決方案!結果以預期的格式出現。但是,第二列顯示逗號分隔「System.Data.DataRow,System.Data.DataRow」而不是實際區域 –

+0

@AnilSoman:我編輯了我的答案 –

+0

現在冷卻它的工作。謝謝! –

0

使用的GroupBy實現這一如下....

var groupedData = from b in dataTable.AsEnumerable() 
        group b by b.Field<string>("State") into g 
        select new 
        { 
         State = g.Key, 
         Regions = g,      
        }; 

然後你就可以通過各組獲得的數據迭代...

foreach (var g in groupedData) 
     {     
      foreach (var w in g.Regions) 
      { 
       Console.WriteLine(w); 
      } 
     } 
+0

謝謝..會嘗試out –