2010/12/29(Wed) 15:21:14 編集(投稿者)
■No56145 (クリッパー さん) に返信
Module Module1
Sub Main()
Dim doc = <root>
<Table1 ID="1" NAME_1="あああ1" NAME_2="いいい1"/>
<Table1 ID="2" NAME_1="あああ2" NAME_2="いいい2"/>
<Table1 ID="8" NAME_1="あああ3" NAME_2="いいい3"/>
<Table1 ID="9" NAME_1="あああ4" NAME_2="いいい4"/>
<Table2 ID="1" VALUE_1="ううう1" VALUE_2="えええ1"/>
<Table2 ID="2" VALUE_1="ううう2" VALUE_2="えええ2"/>
<Table2 ID="2" VALUE_1="ウウウ2" VALUE_2="エエエ2"/>
<Table2 ID="5" VALUE_1="ううう3" VALUE_2="えええ3"/>
<Table2 ID="6" VALUE_1="ううう4" VALUE_2="えええ4"/>
</root>
doc.Save("C:\sample.xml")
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")
'Dim q1 = From r1 In t1 From r2 In t2 _
' Where r1!ID = r2!ID _
' Select r1!ID, r1!NAME_1, r2!VALUE_2
Dim q1 = From r1 In t1 _
Join r2 In t2 _
On r1!ID Equals r2!ID _
Select r1!ID, r1!NAME_1, r2!VALUE_2
For Each o In q1
Console.WriteLine("{0}, {1}, {2}", o.ID, o.NAME_1, o.VALUE_2)
Next
Console.WriteLine()
'2.Table2のIDのリストを、SQLでいうところのDISTINCTのような感じで抽出する方法はありますか?
Console.WriteLine("Distinct of Table2")
Dim idList = (From r2 In t2 Select r2!ID Distinct).ToList()
idList.ForEach(AddressOf Console.WriteLine)
'3.SQLでいうところの、
'SELECT NAME_1 FROM Table1 WHERE ID IN (SELECT ID FROM Table2);
'のような他テーブルの内容を使ったサブクエリ的な方法でDataTable等を作成する方法はありますか?
Console.WriteLine()
Dim q3 = From r1 In t1 Where idList.Contains(r1!ID) Select r1!NAME_1
For Each o In q3
Console.WriteLine(o)
Next
Console.ReadLine()
End Sub
End Module