【VB】C#との差異 (Linq・ラムダ式編)

ラムダ式

ラムダ式の基本構文

Function(左辺) 右辺

ラムダ式構文の左辺

Function() 右辺                 ' パラメータがない場合
Function(param) 右辺            ' パラメータが1つの場合
Function(param1, param2) 右辺   ' パラメータが2つ以上の場合

ラムダ式構文の左辺

Function(左辺) 式

Sub(左辺) 式

Function(左辺)
  式
  式
  Return 式
End Function

Sub(左辺)
  式
  式
  式
End Sub

参考文献

http://www.atmarkit.co.jp/fdotnet/rapidmaster/rapidmaster_02/rapidmaster_02.html
http://blogs.wankuma.com/chuki/archive/2010/01/06/184707.aspx
http://homepage1.nifty.com/rucio/VBLINQ/LINQ03.htm

Linq

サンプル

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button5.Click

    'データ配列
    Dim companies() = New Company() { _
            New Company("X01", "ABC com", 34), _
            New Company("X02", "DEF inc", 19), _
            New Company("X03", "HIJ com", 15), _
            New Company("X04", "KLM inc", 22), _
            New Company("X05", "NOP com", 26), _
            New Company("X06", "QRS com", 20) _
        }

    ' Sample 1
    Dim targetCode As String = Me.TextBox1.Text
    Dim name As String = _
       companies.Where(Function(p) p.Code.Equals(targetCode)) _
         .Select(Function(p) p.Name).FirstOrDefault()

    Dim result As String
    If String.IsNullOrEmpty(name) Then
        result = "Not Found..."
    Else
        result = String.Format("The Company Name is {0}", name)
    End If
    Me.Label1.Text = result

    ' Sample 2
    Dim companyList = _
        companies.Where(Function(x) x.TotalEmployee > 25) _
        .Select(Function(x) New With { _
                    .Code = x.Code, .Name = x.Name})

    Dim result2 As String = String.Empty
    For Each com In companyList
        result2 = result2 & "Code : " & com.Code & " " & "Name : " & com.Name & "<br />"
    Next

    ' 【出力】
    ' Code : X01 Name : ABC com
    ' Code : X05 Name : NOP com
    Me.Label2.Text = result2

End Sub

NotInheritable Class Company
    Public Sub New()

    End Sub
    Public Sub New(ByVal code As String, _
                   ByVal name As String, _
                   ByVal totalEmployee As Integer)
        Me._Code = code
        Me._Name = name
        Me._TotalEmployee = totalEmployee
    End Sub

    Private _Code As String
    Public Property Code() As String
        Get
            Return Me._Code
        End Get
        Set(ByVal value As String)
            Me._Code = value
        End Set
    End Property

    Private _Name As String
    Public Property Name() As String
        Get
            Return Me._Name
        End Get
        Set(ByVal value As String)
            Me._Name = value
        End Set
    End Property

    Private _TotalEmployee As Integer
    Public Property TotalEmployee() As Integer
        Get
            Return Me._TotalEmployee
        End Get
        Set(ByVal value As Integer)
            Me._TotalEmployee = value
        End Set
    End Property
End Class

参考文献

http://pub.ne.jp/rf_app/?entry_id=2702146
http://codezine.jp/article/detail/2269?p=4
http://pub.ne.jp/rf_app/?entry_id=2723462
http://homepage1.nifty.com/rucio/VBLINQ/LINQ03.htm
http://itnandemolab.blog70.fc2.com/blog-entry-2407.html