私が会社に入った頃、プログラミングといえばバッチ処理が殆どで、「ソート」「マッチング」「ブレーク集計」が3種の神器と呼ばれていた(かどうかは知らない)が、だいたいこれさえ知って入れば大抵のプログラミングは出来た。(良い時代だったなぁ)
以下のサンプルで記述している処理などはまさにソートしてマッチングしてブレーク集計してと、3本のプログラムを繋ぎあわせて行っていたような処理である。
それが今ではこんなに簡単に掛けてしまう。
時代の進化ですかね。(そもそもRDBがなかったからSQLさえ無かった)
- //マスターを使ったグループ集計
- public void linqMasterGroupSum(Form1 form)
- {
- using (PubsDataContext pubs = new PubsDataContext())
- {
- pubs.Log = Console.Out;
- var titleSales = pubs.titles.Select(t => new
- {
- t.title,
- sumPrice = t.price * t.sales.Sum(s => s.qty)
- });
- form.dataGridView1.DataSource = titleSales;
- }
- }
titlesテーブルを順に読んでそれにぶら下がっているsalesの数量を合計し金額と掛けてそれぞれの売上を求めている。
埋め込みクエリー方式では以下のようになるが、合計する部分は拡張メソッドとの混在になるようだ。
- //マスターを使ったグループ集計
- public void linqMasterGroupSum(Form1 form)
- {
- using (PubsDataContext pubs = new PubsDataContext())
- {
- var titleSales = from t in pubs.titles
- select new
- {
- t.title,
- sumPrice = t.price * t.sales.Sum(s => s.qty)
- };
- form.dataGridView1.DataSource = titleSales;
- Console.Beep();
- }
あれ、テーブル関係の意味合い的にはちょっと違うがMTG Blog: ◆LINQで明細集計処理と同じ処理だった。(^^;
こちらは親子関係じゃ無いだけで所詮1対多だか当たり前か・・・。
0 件のコメント:
コメントを投稿