さて本題ですが、自分今まで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組むのはさすがに面倒だし。
