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