2012-10-05 166 views
12

tengo un DataTable denominado "DTHead", que tiene los siguientes registros,Dividir un DataTable en 2 o más tablas de datos basados ​​en el valor de la columna

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

Aquí, tengo que dividir el DataTable anteriormente en tres tablas basadas en el MÍVIDO tal como sigue;

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 

Supongamos que, si el encabezado DataTable contiene 4 medios MIVID diferentes, a continuación, 4 DataTable niño debe ser creado basado en el MIVID. ¿Como hacer esto?

Respuesta

25

Uso LINQ to DataTable al grupo de la primera columna por GroupBy, y el método de uso CopyToDataTable a la lista de filas copia a DataTable

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

A continuación, puede obtener el resultado como una lista de tablas de datos como se esperaba.

+0

Perdón por desenterrar un hilo viejo pero, ¿cómo crees que funcionaría si tuviera que estar agrupado por MIVID y otro campo? –

+2

@RohithShenoyG: Puede usar el tipo anónimo, algo así: 'GroupBy (row => new {Field1 = row.Field ('Field1'), Field2 = row.Field ('Field2')})' –

+0

@ Cuong Le es una buena persona, me ha ahorrado mucho tiempo. Solo tiene que ser "en lugar de" (no tratando de ser un sabio aquí, obviamente lo sabes, pero probablemente escribió el "comentario de campo múltiple" aquí). –

Cuestiones relacionadas