在datatable中将多行转换为单行

时间:2012-10-25 10:00:28

标签: linq datatable

我在C#中有一个DataTable,有两列

State    Region
A        1
A        2
B        3
B        4

我想要实现的是

State    Region
A        1,2
B        3,4

这是否可以在C#中使用单个LINQ查询?

我在LINQ中不擅长,也不想循环遍历表来实现它。

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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); 
            } 
        }