ページ

2011年4月10日日曜日

◆LINQでのグループ化結合処理(GroupJoin)

NorthwindのOrderとOrder_Detailのように1対多で多を集計していく処理。
MTG Blog: ◆LINQで明細集計処理で行ったのと同じ処理をリレーションが張られていないものとしてGroupJoinを使って集計してみる。

自分でJoinしなければいけない分やはり若干面倒な処理となる。

        //グループ化結合処理(GroupJoin)
public void linqGroupJoin(Form1 form)
{
using (NorthWindDataContext nwnd = new NorthWindDataContext())
{
var sumPrice = nwnd.Order.GroupJoin(nwnd.Order_Details,
o => o.OrderID, od => od.OrderID,
(o, g) => new
{
o.OrderID,
o.CustomerID,
price = g.Sum(od => od.Quantity * od.UnitPrice)
});
form.dataGridView1.DataSource = sumPrice;
}
}

8行目でOrder_Detailをグループ化したコレクションをgで参照するよう指定している。
あとは、リレーションが張られているときと同様にSum拡張メソッドで集計してあげればOKだ。


埋め込みクエリー方式はこちら。


        //グループ化結合処理(GroupJoin)
public void linqGroupJoin(Form1 form)
{
using (NorthWindDataContext nwnd = new NorthWindDataContext())
{
var sumPrice = from o in nwnd.Order
join od in nwnd.Order_Details on o.OrderID equals od.OrderID into g
select new
{
o.OrderID,
o.CustomerID,
price = g.Sum(od => od.Quantity * od.UnitPrice)
};
form.dataGridView1.DataSource = sumPrice;
Console.Beep();
}
}


グループ化後のOrder_Detailをintoでgに入れている。

0 件のコメント:

コメントを投稿

私が最近チェックした記事