3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(.Net)DataTableで特定の列の値を集計する

DataTable では特例の列の合計や平均などの集計ができるメソッドがあるようです。

そのメソッドがDataTable.Compute()です。

これを使うと今までいちいとループでまわしてた手間が減るので非常に楽ですね。

単に全行の合計値を求めるだけどこう書けます。

'dtblはDataTableオブジェクト Toral列を持っているとする

Dim objSum As Object = dtbl.Compute("Sum(Total)", Nothing)

Compute メソッドの第二引数で、フィルタが指定できるので、特定の条件のみのデータの場合に集計することもできます。

'ID列の値が10より大きい行のみ集計の対象

Dim objSum As Object = dtbl.Compute("Sum(Total)", "Id > 10")

'これはMSDNにあった例ですが、日付も条件に指定できる見たい

Dim objSum As Object = dtbl.Compute("Sum(Total)", "colDate > 1/1/99 AND colDate < 17/1/99 ")

どういう集約型や演算子が使えるは、MSDN:DataColumn.Expressionプロパティを見るとわかります。

ただ、MSDNは長いのでパッと知りたいときは下記サイトが参考になります。

DataTableの集約計算を行う(Compute)

なお、集計対象の行がないと DBNull が帰ったので注意が必要です。