Разбить DataTable на 2 или более DataTables на основе значения столбца

У меня есть DataTable, называемый "DTHead", который имеет следующие записи,

 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

Предположим, если DataTable Header содержит 4 разных средства MIVID, тогда необходимо создать 4 дочерний DataTable на основе MIVID. Как это сделать?

Ответ 1

Используйте LINQ to DataTable для группировки первого столбца с помощью GroupBy и используйте метод CopyToDataTable, чтобы скопировать список строк в DataTable

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

Затем вы можете получить результат как список DataTables, как вы ожидали.

Ответ 2

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();