2012-10-25 29 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 –