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を実際に使った事は無い。
ただ、こういう事もできるという話。
でも、最初から、親テーブルも子テーブルもあるなら、使えるかも。