ページ

2011年4月8日金曜日

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

私が会社に入った頃、プログラミングといえばバッチ処理が殆どで、「ソート」「マッチング」「ブレーク集計」が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 件のコメント:

コメントを投稿

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