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

the*_*van 13 c# asp.net datatable visual-studio-2010

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

 MIVID      Quantity         Value
------     ----------       --------
   1           10             3000
   1           20             3500
   1           15             2000
   2           20             3000
   2           50             7500
   3           25             2000
Run Code Online (Sandbox Code Playgroud)

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

DTChild1:

  MIVID           Quantity        Value
 -------         ----------     ---------
   1                10             3000
   1                20             3500
   1                15             2000
Run Code Online (Sandbox Code Playgroud)

DTChild2:

  MIVID           Quantity        Value
 -------         ----------     ---------
   2                20             3000
   2                50             7500
Run Code Online (Sandbox Code Playgroud)

DTChild3:

  MIVID           Quantity        Value
 -------         ----------     ---------
    3               25             2000
Run Code Online (Sandbox Code Playgroud)

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

cuo*_*gle 29

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

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

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

  • @RohithShenoyG:你可以使用匿名类型,类似:`GroupBy(row => new {Field1 = row.Field <int>('Field1'),Field2 = row.Field <int>('Field2')}) ` (2认同)