Je suggère une extension sur la réponse de Steven, car cela ne fera que retourner une séquence des valeurs scalaires c
et ne pas les conserver associés aux utilisateurs ou aux montants a
et b
. Essayez ceci:
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};
Ensuite, si vous voulez reconvertir en forme de tableau:
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);
Note: Je l'ai testé cela et il fonctionne.
dans LINQ to SQL, ou avez-vous déjà les données dans une collection typée (et donc, LINQ to Objects)? –
Je suppose que vous voulez dire que vous voulez regrouper par la valeur de l'utilisateur, car toutes les combinaisons d'utilisateur et de type sont uniques? – Guffa
LINQ to SQL, ceci est une donnée génératrice – moeezed