匿名型
LINQを弄っている。社員クラス、住所クラスを用意しそれを結びつけてみる。
- 社員クラス
Public Class ClsSyain Private m_Code As Integer Private m_Name As String Private m_AddressCode As String Private Sub New() End Sub Public Sub New(ByVal vCode As Integer, ByVal vName As String, ByVal vAddressCode As String) Me.m_Code = vCode Me.m_Name = vName Me.m_AddressCode = vAddressCode End Sub Public Property Code() As Integer Get Return m_Code End Get Set(ByVal value As Integer) m_Code = value End Set End Property Public Property Name() As String Get Return m_Name End Get Set(ByVal value As String) m_Name = value End Set End Property Public Property AddressCode() As String Get Return m_AddressCode End Get Set(ByVal value As String) m_AddressCode = value End Set End Property End Class
- 住所クラス
Public Class ClsAddress Private m_AddressCode As String Private m_Address As String Private Sub New() End Sub Public Sub New(ByVal vAddressCode As String, ByVal vAddress As String) Me.m_AddressCode = vAddressCode Me.m_Address = vAddress End Sub Public Property AddressCode() As String Get Return m_AddressCode End Get Set(ByVal value As String) m_AddressCode = value End Set End Property Public Property Address() As String Get Return m_Address End Get Set(ByVal value As String) m_Address = value End Set End Property End Class
- 結びつける処理
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim SyainArry As New System.Collections.Generic.List(Of ClsSyain) SyainArry.Add(New ClsSyain(3, "社員3", "001")) SyainArry.Add(New ClsSyain(5, "社員5", "003")) SyainArry.Add(New ClsSyain(4, "社員4", "001")) SyainArry.Add(New ClsSyain(2, "社員2", "002")) SyainArry.Add(New ClsSyain(1, "社員1", "001")) Dim AddresArry As New System.Collections.Generic.List(Of ClsAddress) AddresArry.Add(New ClsAddress("001", "住所1")) AddresArry.Add(New ClsAddress("002", "住所2")) AddresArry.Add(New ClsAddress("003", "住所3")) Dim f = From syain In SyainArry, jyusyo In AddresArry _ Where syain.AddressCode = jyusyo.AddressCode _ Order By syain.Code _ Select syain.Name, jyusyo.Address For Each x In f Console.WriteLine(x.Name & ":" & x.Address) Next End Sub
動いた。なんと素晴らしい!!一件落着・・・・いや、終わっていない。
Dim f = From syain In SyainArry, jyusyo...
この行で宣言している変数f。こいつは何だ。いきなり出てきて直後For Eachに回される。なんとも軽い存在だが・・・ヒントをみて見ると、
Dim f As System.Collections.Generic.IEnumerable(Of <匿名型>)
さらに変数xは、
Dim x As <匿名型>
匿名型・・・初耳だ。初顔合わせだ。ヘルプにはAnonymousTypeとして記述されている。自前で宣言もできる。
Dim a1 As Integer = 55 Dim Anon = New With {.Bango = a1, .Name = "TestVal"} Console.WriteLine(Anon.Bango) Console.WriteLine(Anon.Name)
なんじゃこりゃ・・・柔らかいがカチッとしている。憎めない存在だ。