根据Column值将DataTable拆分为2个或更多DataTable

时间:2012-10-05 05:58:45

标签: c# asp.net visual-studio-2010 datatable

我有一个名为“DTHead”的DataTable,它有以下记录,

 MIVID      Quantity         Value
------     ----------       --------
   1           10             3000
   1           20             3500
   1           15             2000
   2           20             3000
   2           50             7500
   3           25             2000

在这里,我需要将上面的DataTable分成三个基于MIVID的表,如下所示;

DTChild1:

  MIVID           Quantity        Value
 -------         ----------     ---------
   1                10             3000
   1                20             3500
   1                15             2000

DTChild2:

  MIVID           Quantity        Value
 -------         ----------     ---------
   2                20             3000
   2                50             7500

DTChild3:

  MIVID           Quantity        Value
 -------         ----------     ---------
    3               25             2000

假设,如果Header DataTable包含4个不同的MIVID方法,那么应该根据MIVID创建4个Child DataTable。怎么做?

2 个答案:

答案 0 :(得分:28)

使用LINQ to DataTableGroupBy对第一列进行分组,并使用方法CopyToDataTable将行列表复制到DataTable

 List<DataTable> result = DTHead.AsEnumerable()
            .GroupBy(row => row.Field<int>("MIVID"))
            .Select(g => g.CopyToDataTable())
            .ToList();

然后,您可以按预期将结果作为DataTable列表获取。

答案 1 :(得分:0)

DataTable tbl = new DataTable("Data").AsEnumerable()
    .Where(r => r.Field<int>("ParentId") == 1) // ParentId == 1
    .Where(r => r.Field<int>("Id") > 3) // Id > 3
    .Where(r => r.Field<string>("Name").Contains("L")) // Name contains L
    .OrderBy(r => r.Field<int>("Id")) // Order by Id
    .CopyToDataTable();