2010/12/29(Wed) 15:16:19 編集(投稿者)
■No56147 (魔界の仮面弁士) に追記
先ほどのは Linq による抽出。
今回は DataView による抽出。
Dim ds As New DataSet()
ds.ReadXml("C:\sample.xml")
Dim t1 As DataTable = ds.Tables("Table1")
Dim t2 As DataTable = ds.Tables("Table2")
'1.Table1とTable2を内部結合する方法はありますか?
Console.WriteLine("Table1.ID, Table1.NAME_1, Table2.VALUE_2")
ds.Relations.Add("Rel", t1.Columns("ID"), t2.Columns("ID"), False)
Dim dv1 As New DataView(t1)
For Each r1 As DataRowView In dv1
For Each r2 In r1.Row.GetChildRows("Rel")
Console.WriteLine("{0}, {1}, {2}", r1!ID, r1!NAME_1, r2!VALUE_2)
Next
Next
Console.WriteLine()
'2.Table2のIDのリストを、SQLでいうところのDISTINCTのような感じで抽出する方法はありますか?
Console.WriteLine("Distinct of Table2")
Dim dv2 As New DataView(t2)
Dim tbl2 As DataTable = dv2.ToTable(True, "ID")
For Each r2 As DataRow In tbl2.Rows
Console.WriteLine(r2!ID)
Next
Console.WriteLine()
'3.SQLでいうところの、
'SELECT NAME_1 FROM Table1 WHERE ID IN (SELECT ID FROM Table2);
'のような他テーブルの内容を使ったサブクエリ的な方法でDataTable等を作成する方法はありますか?
Dim dv3 As New DataView(t1, "COUNT(Child(Rel).ID)>0", "", DataViewRowState.CurrentRows)
Dim t3 As DataTable = dv3.ToTable("Table3", False, "NAME_1")
For Each r3 As DataRow In t3.Rows
Console.WriteLine(r3!NAME_1)
Next
Console.ReadLine()