2012-10-05 7 views
12

Mam DataTable nazwie „DTHead”, który ma następujące rekordy,Podział DataTable na 2 lub więcej DataTables w oparciu o wartość kolumny

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

Tutaj muszę podzielić powyższą DataTable do trzech tabel opartych na MIVID w następujący sposób;

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 

Załóżmy, jeśli DataTable Nagłówek zawiera 4 różnych środków MIVID, a następnie 4 dzieci DataTable należy stworzyć w oparciu o MIVID. Jak to zrobić?

Odpowiedz

25

Zastosowanie LINQ to DataTable do grupy pierwszej kolumnie przez GroupBy i metoda użycie CopyToDataTable do listy wierszy skopiować do DataTable

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

Następnie można uzyskać wynik w postaci listy DataTables jak oczekiwano.

+0

Przepraszam za wykopanie starego wątku, ale jak myślisz, jak by działało, gdyby miało zostać zgrupowane zarówno przez MIVID, jak i inne pole? –

+2

@RohithShenoyG: Możesz użyć typu anonimowego, coś w tym stylu: 'GroupBy (wiersz => nowy {Field1 = wiersz.Field ('Field1'), Field2 = row.Field ('Field2')})' –

+0

@ Cuong Le, który jest dobry, zaoszczędził mi wiele czasu. Po prostu musi być "zamiast" (nie starając się być mądrym tutaj, oczywiście to wiesz, ale prawdopodobnie napisał tutaj "komentarz z wieloma polami") –