2013年7月12日金曜日

DataTableからLINQを使ってデータを取り出す

久しぶりにDataTableに対してLINQを使いました。
いまさらな感じは否めませんが,記録として残します。

    

    Public Sub DataTableLinqSelectTest()

        'テスト用テーブル作成
        Dim dt As New DataTable("TestTable")
        With dt.Columns
            .Add("Code")
            .Add("Name")
            .Add("Type")
            .Add("Value", Type.GetType("System.Int32"))
        End With

        Dim nr As DataRow

        nr = dt.NewRow
        nr("Code") = "001"
        nr("Name") = "株式会社テスト工業"
        nr("Type") = "製造"
        nr("Value") = 100000
        dt.Rows.Add(nr)

        nr = dt.NewRow
        nr("Code") = "002"
        nr("Name") = "株式会社テストマテリアルズ"
        nr("Type") = "製造"
        nr("Value") = 200000
        dt.Rows.Add(nr)

        nr = dt.NewRow
        nr("Code") = "003"
        nr("Name") = "株式会社テストシステム"
        nr("Type") = "ソフトウェア"
        nr("Value") = 150000
        dt.Rows.Add(nr)

        nr = dt.NewRow
        nr("Code") = "004"
        nr("Name") = "株式会社テストストア"
        nr("Type") = "小売"
        nr("Value") = 150000
        dt.Rows.Add(nr)

        nr = dt.NewRow
        nr("Code") = "005"
        nr("Name") = "株式会社手須戸インダストリー"
        nr("Type") = "製造"
        nr("Value") = 250000
        dt.Rows.Add(nr)

        'Typeが「製造」でNameに「テスト」を含むデータを取得
        Dim query = From el In dt.AsEnumerable
                    Where el("Type") = "製造"
                    Where el("Name") Like "*テスト*"
                    Order By el("Code") Ascending
                    Select el

        'データの書き出し
        For Each r As DataRow In query
            Debug.WriteLine(r("Code") & ": " & r("Name"))
        Next

        'Valueの合計を取得
        Dim valuesum = query.Sum(Function(el) el("Value"))
        Debug.WriteLine("Sum: " & valuesum)

    End Sub

    

0 件のコメント:

コメントを投稿