query objects nodejs fields array c# linq datatable group-by sum

c# - objects - mongodb query operators



Uso de Linq para GroupBy y Sum datatable (2)

Estás haciendo tus llamadas desordenadas. El siguiente código no incluirá los datos en una tabla, pero le dará datos que podría poner fácilmente en una tabla.

dt.AsEnumberable() .GroupBy(g => g["ID]) .Select(g => new { Id = g.Key, Amount1 = g.Sum(s => s.Amount1), Amount2 = g.Sum(s => s.Amount2), Amount3 = g.Sum(s => s.Amount3)});

Hola, tengo una tabla de datos como esta:

Id Amount 1 Amount 2 Amount 3 1 2 2 2 12 4 6 4 12 6 6 5 22 7 2 1 22 7 2 2

Necesito obtener mi datatable así:

Id Amount 1 Amount 2 Amount 3 1 2 2 2 12 10 12 9 22 14 4 3

Originalmente intenté hacerlo de forma anónima, pero debo devolverlo a otra clase que no se puede hacer con un método anónimo. Mi segundo intento fue hacer esto para que pueda ser devuelto:

DataTable ddt = dt.AsEnumerable() .Sum(g => g.Field<int>("Amount 1")) .GroupBy(g => new { Col1 = g["ID"] }) .Select(g => g.OrderBy(r => r["ID"]).First()) .CopyToDataTable();

Este código definitivamente no compilará, pero cualquier ayuda / consejo si es posible sería muy apreciado. Soy muy nuevo en linq.


Primero puede GroupBy , luego proyectar los grupos a DataRow , luego crear DataTable usando la extensión CopyToDataTable :

var newDt = dt.AsEnumerable() .GroupBy(r => r.Field<int>("Id")) .Select(g => { var row = dt.NewRow(); row["Id"] = g.Key; row["Amount 1"] = g.Sum(r => r.Field<int>("Amount 1")); row["Amount 2"] = g.Sum(r => r.Field<int>("Amount 2")); row["Amount 3"] = g.Sum(r => r.Field<int>("Amount 3")); return row; }).CopyToDataTable();