【VB.NET】LINQの使い方(Select, Where)

Select:シーケンスの加工を行う

VB
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim dt As New DataTable
        With dt
            .Columns.Add("Name", GetType(String)) '氏名
            .Columns.Add("Country", GetType(String)) '出身国
            .Columns.Add("Age", GetType(Integer)) '年齢
            .Rows.Add("アリス", "アメリカ", "10")
            .Rows.Add("山田太郎", "日本", "18")
            .Rows.Add("山田花子", "日本", "25")
        End With

        'Name列のみ抽出し、リストに格納
        Dim list = dt.AsEnumerable().Select(Function(row) row.Field(Of String)("Name")).ToList

        '出力結果---
        Debug.WriteLine(list(0)) 'アリス
        Debug.WriteLine(list(1)) '山田太郎
        Debug.WriteLine(list(2)) '山田花子
    End Sub

Where:シーケンスのフィルタ処理を行う

VB
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim dt As New DataTable
        With dt
            .Columns.Add("Name", GetType(String)) '氏名
            .Columns.Add("Country", GetType(String)) '出身国
            .Columns.Add("Age", GetType(Integer)) '年齢
            .Rows.Add("アリス", "アメリカ", "10")
            .Rows.Add("山田太郎", "日本", "18")
            .Rows.Add("山田花子", "日本", "25")
        End With

        '指定した条件での絞り込み
        Dim rows = dt.AsEnumerable().Where(Function(row) row.Field(Of String)("Country") = "日本").
                                     Where(Function(row) row.Field(Of Integer)("Age") < 20)

        '出力結果---
        Debug.WriteLine(rows(0).Item("Name")) ' 山田太郎

    End Sub

コメント

タイトルとURLをコピーしました