que sugeriría una expansión en la respuesta Steven 's, ya que sólo devolverá una secuencia de valores escalares c
y no mantenerlos asociados con los usuarios o los importes a
y b
. Prueba esto:
var query1 = from i in table
group i by i.user
into g
let a = g.Where(t => t.type == "a").Sum(t => t.amount)
let b = g.Where(t => t.type == "b").Sum(t => t.amount)
let c = g.Where(t => t.type == "c").Sum(t => t.amount)
- (a + b)
select new {user = g.Key, a, b, c};
Entonces, si quieres convertirlo de nuevo en forma de tabla:
var query2 = query1.SelectMany(q => new List<TableType>
{
new TableType(q.user, "a", q.a),
new TableType(q.user, "b", q.b),
new TableType(q.user, "c", q.c)
})
.OrderBy(t => t.user)
.ThenBy(t => t.type);
Nota: He probado esto y funciona.
en LINQ to SQL, o ya tiene los datos en una colección tipada (y por lo tanto, LINQ to Objects)? –
Supongo que quiere decir que quiere agrupar por el valor del usuario, ya que todas las combinaciones de usuario y tipo son únicas. – Guffa
LINQ to SQL, esta es una datatable genretaed – moeezed