ssCAROのブログ

色んなとこで見つけたプログラムのメモ置き場っぽい

DataTableのデータをLINQで抽出する

DataTableのSelectを使うと遅いって、よく見るのでLINQを使ってみた。
LINQがさっぱり分からなくて、とりあえずSelectの変わりになる程度のを作成した。

ItemTable (Index作成済み)には
ITEM_NO, ITEM_NAME

SeihinTable (Index作成済み)には
SEIHIN_NO, SEIHIN_NAME

製品Noの製品名称をItemTableから取得して格納する。
どちらのテーブルも数1000件ほどのデータで実行するとSelectの方が早かった!

Select:200ms
LINQ:500ms

たぶんもっとデータが多くなるとLINQの方が早くなるんだと思います。

For Each row As DataRow In SeihinTable.Rows
    Dim itemNo As String

    'Select使用
    itemNo = row.Field(Of String)("SEIHIN_NO")
    If itemNo IsNot Nothing Then
        Dim rowsItem() As DataRow = ItemTable.Select("ITEM_NO = " & itemNo)
        row.SetField(Of String)("SEIHIN_NAME", rowsItem(0).Field(Of String)("ITEM_NAME"))
    End If

    'LINQを使用
    itemNo = row.Field(Of String)("SEIHIN_NO")
    If itemNo IsNot Nothing Then
        Dim rowsItem = From rowItem In ItemTable.AsEnumerable()
                   Where rowItem.Field(Of String)("ITEM_NO") = itemNo
                   Select rowItem
        row.SetField(Of String)("SEIHIN_NAME", rowsItem(0).Field(Of String)("ITEM_NAME"))
    End If
Next