DataRelationとDataColumn.Expressionプロパティを利用したグループ化処理のサンプル

DBからすでにデータを持ってきた子テーブルという名前のDataTableがある前提(サンプルではねつ造している。)
番号でグルーピングして、数量計を取りたい。


001 Dim 子テーブル As New DataTable
002 子テーブル.Columns.Add(New DataColumn("番号"))
003 子テーブル.Columns.Add(New DataColumn("枝番"))
004 子テーブル.Columns.Add(New DataColumn("数量", GetType(Decimal)))
005
006 For 番号 As Integer = 1 To 10
007 For 枝番 As Integer = 1 To 10
008 Dim 新規行 As DataRow = 子テーブル.NewRow()
009 新規行("番号") = 番号
010 新規行("枝番") = 枝番
011 新規行("数量") = 番号 * 100 + 枝番
012 子テーブル.Rows.Add(新規行)
013 Next
014 Next
015
016
017 Dim 親テーブル As New DataTable
018 親テーブル.Columns.Add(New DataColumn("番号"))
019 親テーブル.Columns.Add(New DataColumn("数量計", GetType(Decimal)))
020 For 番号 As Integer = 1 To 10
021 Dim 新規行 As DataRow = 親テーブル.NewRow()
022 新規行("番号") = 番号
023 親テーブル.Rows.Add(新規行)
024 Next
025
026 Dim ds As New DataSet
027 ds.Tables.Add(子テーブル)
028 ds.Tables.Add(親テーブル)
029
030 Dim 番号でグループ化するためのリレーション As New DataRelation("サンプル", 親テーブル.Columns("番号"), 子テーブル.Columns("番号"))
031
032 親テーブル.ChildRelations.Add(番号でグループ化するためのリレーション)
033 親テーブル.Columns("数量計").Expression = "SUM(Child.数量)"
034
035 For Each 現在行 As DataRow In 親テーブル.Rows
036 Console.WriteLine(String.Format("番号:{0} 数量計:{1}", 現在行("番号"), 現在行("数量計")))
037 Next
038
039

正直な話親のDataTableを作ろうと思ったら結局ループ処理が必要になるので、expressionを実際に使った事は無い。
ただ、こういう事もできるという話。
でも、最初から、親テーブルも子テーブルもあるなら、使えるかも。