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