(1) 「Microsoft Visual Studio Express 2012 for Windows Desktop」を開き、新規で「Windowsフォームアプリケーション」を開く
(2) Form1に適当にDataGridViewをいれておく。
(3) Form1.vbに以下のコードを追記
Public Class Form1
Public Sub New()
' この呼び出しはデザイナーで必要です。 InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。 Construct() End Sub
Private Sub Construct() ' テーブル定義 Dim dtMain As New DataTable dtMain.Columns.Add(New DataColumn With {.DataType = System.Type.GetType("System.Int32"), .ColumnName = "ID"}) dtMain.Columns.Add(New DataColumn With {.DataType = System.Type.GetType("System.String"), .ColumnName = "NAME"})
Dim dtSub1 As DataTable = dtMain.Clone Dim dtSub2 As DataTable = dtMain.Clone Dim dtKekka As DataTable = dtMain.Clone Dim dtRow As DataRow = Nothing
' データインサート For i As Integer = 1 To 3 dtRow = dtMain.NewRow dtRow("ID") = i dtMain.Rows.Add(dtRow) If i = 1 Then dtRow("NAME") = "外結DT1" dtSub1.ImportRow(dtRow) ElseIf i = 3 Then dtRow("NAME") = "外結DT2" dtSub2.ImportRow(dtRow) End If Next
' 外結クエリ① Dim query = From main In dtMain.AsEnumerable _ From sub1 In dtSub1.AsEnumerable.Where(Function(m) m.Field(Of Integer)("ID") = main.Field(Of Integer)("ID")).DefaultIfEmpty() _ From sub2 In dtSub2.AsEnumerable.Where(Function(m) m.Field(Of Integer)("ID") = main.Field(Of Integer)("ID")).DefaultIfEmpty() _ Select New With _ { _ .id = main!ID, _ .name = If(sub1 Is Nothing, If(sub2 Is Nothing, main!NAME, sub2!NAME), sub1!NAME) _ } For Each row In query dtRow = dtKekka.NewRow dtRow("ID") = row.id dtRow("NAME") = row.name dtKekka.Rows.Add(dtRow) Next Me.DataGridView1.DataSource = dtKekka