ページ

2011年4月8日金曜日

◆LINQでマスターを使ったグループ集計処理

私が会社に入った頃、プログラミングといえばバッチ処理が殆どで、「ソート」「マッチング」「ブレーク集計」が3種の神器と呼ばれていた(かどうかは知らない)が、だいたいこれさえ知って入れば大抵のプログラミングは出来た。(良い時代だったなぁ)

以下のサンプルで記述している処理などはまさにソートしてマッチングしてブレーク集計してと、3本のプログラムを繋ぎあわせて行っていたような処理である。

それが今ではこんなに簡単に掛けてしまう。
時代の進化ですかね。(そもそもRDBがなかったからSQLさえ無かった)

  1. //マスターを使ったグループ集計  
  2. public void linqMasterGroupSum(Form1 form)  
  3. {  
  4.     using (PubsDataContext pubs = new PubsDataContext())  
  5.     {  
  6.         pubs.Log = Console.Out;  
  7.         var titleSales = pubs.titles.Select(t => new  
  8.                                         {  
  9.                                             t.title,  
  10.                                             sumPrice = t.price * t.sales.Sum(s => s.qty)  
  11.                                         });  
  12.         form.dataGridView1.DataSource = titleSales;  
  13.     }  
  14. }  

titlesテーブルを順に読んでそれにぶら下がっているsalesの数量を合計し金額と掛けてそれぞれの売上を求めている。


埋め込みクエリー方式では以下のようになるが、合計する部分は拡張メソッドとの混在になるようだ。


  1. //マスターを使ったグループ集計  
  2. public void linqMasterGroupSum(Form1 form)  
  3. {  
  4.     using (PubsDataContext pubs = new PubsDataContext())  
  5.     {  
  6.         var titleSales = from t in pubs.titles  
  7.                          select new  
  8.                          {  
  9.                              t.title,  
  10.                              sumPrice = t.price * t.sales.Sum(s => s.qty)  
  11.                          };  
  12.         form.dataGridView1.DataSource = titleSales;  
  13.         Console.Beep();  
  14.     }  

あれ、テーブル関係の意味合い的にはちょっと違うがMTG Blog: ◆LINQで明細集計処理と同じ処理だった。(^^;


こちらは親子関係じゃ無いだけで所詮1対多だか当たり前か・・・。


0 件のコメント:

コメントを投稿

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