さて本題ですが、自分今までLINQでグループ化するとき、(こういう言い方が正しいかはわかりませんが、)匿名化した固まりを要素単位まで分解してグループ化してたんですよって言うかそうしないとグループ化できないと思い込んでたんですよ。ところがたまたま固まりごとグループ化してみたらできちゃったんでびっくりってなわけです。どういうことかは以下のサンプルで。
データ
Users |
---|
Id |
Name |
Points |
---|
Id |
UserId |
Point |
見ての通り、UsersとPointsはIdとUserIdで連結可能であり、今回はIdとNameでグループ化し、Pointの合計を求めたいということにします。
今までコード
from p in (from p in users join g in points on p.Id equals g.UserId select new { users= p, points = g }) group p by new { p.users.Id, p.points.Name } into g select new { g.Key.Id, g.Key.Name, Point = g.Sum(p.points.Point) }
新しいコード
from p in (from p in users join g in points on p.Id equals g.UserId select new { users = p, points = g }) group p by p.users into g select new { g.Key.Id, g.Key.Name, Point = g.Sum(p.points.Point) }
ちょっと、変化が少なすぎて分かりにくいかもしれませんが、IdとNameを指定してグループ化していたのをusersのみの指定でグループ化を済ましています。まぁグループ化の単位によっては全然使えなかったりするわけですが、頭の片隅には置いておこうと思った次第で…。
う~ん、毎度このながらなんてセンスのないサンプルでしょうか…。あとテーブルって簡単に横並びにできんもんだろうか…、float組むのはさすがに面倒だし。